You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用JObject解析动态数据时如何访问名称以数字开头的属性

解决方案
  • 方案1:保留dynamic写法,用索引器访问数字键属性
    JObject类型支持通过字符串索引器访问任意属性名,不需要遵守C#标识符命名规则,直接把数字开头的属性名用引号包裹传入索引器即可:
// 直接通过字符串索引访问数字开头的属性
string commentText = data.feedComments["3465665"].text;

该方案改动最小,不需要调整原有解析逻辑,适合快速开发场景。

  • 方案2:改用强类型解析,用字典映射数字键结构
    如果需要编译时类型检查、避免dynamic的运行时错误,可以定义实体类,将数字键的feedComments字段映射为C#的字典类型:
    首先定义对应结构的实体类:
public class Comment
{
    public string Text { get; set; }
    public int LikeRatio { get; set; }
}

public class FeedRoot
{
    public int Index { get; set; }
    public int CommentNumber { get; set; }
    // 数字键的JSON对象天然对应字典结构,键类型用long避免大数字溢出
    public Dictionary<long, Comment> FeedComments { get; set; }
}

解析时直接反序列化为强类型对象:

string objectString = GetData();
FeedRoot data = JsonConvert.DeserializeObject<FeedRoot>(objectString);

访问评论的写法:

// 直接通过字典索引访问,支持数字类型的键
string commentText = data.FeedComments[3465665].Text;
  • 方案3:遍历所有评论
    如果需要批量处理所有feedComments下的评论,不需要提前知道ID,直接遍历即可:
    dynamic场景下的遍历:
foreach (var commentEntry in data.feedComments)
{
    string commentId = commentEntry.Name;
    string text = commentEntry.Value.text;
    int likeRatio = commentEntry.Value.likeRatio;
    // 自定义处理逻辑
}

强类型场景下的遍历:

foreach (var (commentId, comment) in data.FeedComments)
{
    string text = comment.Text;
    int likeRatio = comment.LikeRatio;
    // 自定义处理逻辑
}

内容的提问来源于stack exchange,提问作者AdamDevv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:36:04