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

C#使用Newtonsoft.Json反序列化JSON数据的最佳实践咨询

C#

用Newtonsoft.Json不需要为JSON的每一层结构单独定义映射类就能完成反序列化,针对你提到的类冗余、动态适配差的问题,可直接选用以下两种方案:

方案1:JObject/JArray动态解析(适配多结构、结构不固定的JSON场景)

Newtonsoft.Json原生提供JObject、JArray类型,可直接反序列化任意结构的JSON,无需提前定义任何类,通过索引即可按字段名取值,是处理动态JSON结构的首选方案。
示例代码:

// 直接读取并解析JSON,无需提前定义Root/Category/Feature类
JObject root = JObject.Parse(File.ReadAllText(@"..\..\Json\features.json"));
JArray categories = (JArray)root["category"];

foreach (JObject category in categories)
{
    string catName = category["name"]?.ToString();
    JArray features = (JArray)category["feature"];
    foreach (JObject feature in features)
    {
        // 取出的值可直接绑定到WinForm控件
        string featName = feature["name"]?.ToString();
        string frequency = feature["frequency"]?.ToString();
    }
}

该方案灵活度最高,无论后续JSON结构怎么调整、需要处理多少个不同结构的JSON文件,都不需要新增额外的类定义。使用时建议对字段取值加空判断,避免JSON缺字段时触发空引用异常。

方案2:嵌套内置泛型反序列化(适配结构相对固定的场景)

如果不想使用动态类型,也无需单独定义多层自定义类,可以直接用C#内置的Dictionary、List泛型组合作为反序列化目标类型,匹配JSON层级即可。
针对你当前的features.json结构,代码可简化为:

// 用内置泛型嵌套替代自定义类,无需单独声明Category、Feature类
var data = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, object>>>>(
    File.ReadAllText(@"..\..\Json\features.json")
);
List<Dictionary<string, object>> categoryList = data["category"];

如果需要强类型提示,也可以把所有映射类作为私有类嵌套定义在WinForm窗体类内部,不会和其他业务代码混杂,也能解决单文件类定义杂乱的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:30:39