使用Newtonsoft-C#-.Net反序列化带@和#前缀JSON属性时遇值为null问题
解决JsonConvert反序列化特殊前缀属性为null的问题
嗨,这个问题我之前处理类似结构的JSON时也踩过坑!你遇到的核心问题是:JSON里的键带有@和#这类特殊符号,但C#属性没法直接用这些字符命名,Json.NET默认的名称匹配规则找不到对应映射,才导致这些属性值全是null。下面是具体的解决办法:
核心方案:用JsonProperty特性指定映射关系
你只需要给Stats类里的对应属性加上JsonProperty特性,明确指定它们对应JSON里的特殊键名就行。举个例子:
public class Stats { // 映射JSON里的@category键 [JsonProperty("@category")] public string Category { get; set; } // 映射JSON里的@abbreviation键 [JsonProperty("@abbreviation")] public string Abbreviation { get; set; } // 映射JSON里的#text键 [JsonProperty("#text")] public string Text { get; set; } // 其他属性... }
为什么这样有效?
Json.NET默认会尝试将C#属性名和JSON键名进行大小写不敏感的匹配,但当JSON键包含@、#这类C#属性名不允许的特殊符号时,必须手动通过JsonProperty特性告诉序列化器:“这个C#属性对应JSON里的那个特殊命名的键”,这样反序列化时才能正确绑定值。
额外提示
如果你的大型JSON里有大量这类带特殊前缀的属性,也可以考虑自定义命名策略来批量处理,但对于单个或少量属性来说,直接用JsonProperty是最直观、最容易维护的方式。
修改完类结构后,再用JsonConvert.DeserializeObject()进行反序列化,那些之前为null的属性应该就能正确获取到值啦!
内容的提问来源于stack exchange,提问作者StephenG
相关产品推荐
相关产品推荐

