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
相关产品推荐
相关产品推荐

