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

C#中JsonToCSharp生成模型解析JSON时字符串列表始终为null的问题

看起来你遇到的问题是Newtonsoft.Json反序列化时,所有字符串列表类型的Includes字段都返回null,但其他字段正常解析。结合你提供的JSON结构和模型代码,我整理了几个最可能的原因和对应的解决方案:

1. JSON中包含非标准注释导致解析异常

JSON官方标准不支持//或/* */这类注释,而Newtonsoft.Json默认的解析设置会将注释视为语法错误。如果你的实际JSON文件中包含示例里的// <= 此字段始终为null这类注释,即使没有抛出明显异常,也可能导致解析器在处理数组字段时出错,最终返回null。

解决方法:

  • 彻底移除JSON文件中的所有注释,确保格式完全符合JSON标准。
  • 如果确实需要保留注释,可以在反序列化时启用注释支持:
    var settings = new JsonSerializerSettings
    {
        CommentHandling = CommentHandling.Ignore
    };
    return JsonConvert.DeserializeObject<Package>(jsonContent, settings);
    

2. 接口类型IList<string>的反序列化兼容性问题

虽然Newtonsoft.Json理论上支持反序列化到IList<T>接口,但在某些场景(比如使用较旧版本的Newtonsoft.Json)下,可能会出现无法自动实例化具体实现类的情况,导致字段为null。

解决方法:
将模型中所有字符串列表的接口类型替换为具体的List<string>类型,比如:

// Target类中的Includes
[JsonProperty("Includes")]
public List<string> Includes { get; set; }

// Directory类中的Includes
[JsonProperty("Includes")]
public List<string> Includes { get; set; }

3. 验证JSON格式的有效性

即使看起来结构正确,JSON中隐藏的语法错误(比如数组末尾多余的逗号、引号不匹配、编码问题)也可能导致部分字段解析失败。

解决方法:
使用JSON校验工具检查你的JSON文件,确保没有任何语法错误。

4. 调试确认解析过程

如果以上方法都无效,可以添加调试代码,直接解析为JObject来验证原始JSON中的Includes字段是否能被正确读取:

var jObject = JsonConvert.DeserializeObject<JObject>(jsonContent);
// 检查第一个Target的Includes
var firstTargetIncludes = jObject["Targets"][0]["Includes"];
Console.WriteLine($"第一个Target的Includes值:{firstTargetIncludes}");
// 检查Directory中的Includes
var directoryIncludes = jObject["Targets"][1]["Directories"][0]["Includes"];
Console.WriteLine($"Directory的Includes值:{directoryIncludes}");

如果JObject能正确读取到值,说明问题出在模型类的定义上;如果JObject也读不到值,说明JSON本身存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:05:39