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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:46:03