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

C#模型序列化JSON时格式异常问题求助

字段值合并导致JSON格式异常的排查与解决

尝试将C#模型序列化为JSON后提交至API时,出现未知原因的字段值合并问题,异常JSON片段如下:

"noOfYearsInsured"…esidencyMonths":"60"

分别使用System.Text.Json和Newtonsoft.Json序列化器,二者在不同位置出现格式异常,询问是否可通过配置JsonSerializerSettings解决该问题。

这种字段值合并的异常大概率不是单纯靠配置就能解决,但调整序列化配置或排查模型问题可以定位并修复,具体方案如下:

一、先排查模型本身的问题(最可能的根因)

  • 检查模型类中是否存在字段/属性重复定义或命名冲突,比如两个属性被映射到同一个JSON字段名
  • 查看属性的get/set逻辑,是否有某个属性的 getter 意外修改了其他字段的值,导致序列化时数据混乱
  • 确认是否同时混用了不同序列化库的特性,比如给同一个属性同时加了[JsonProperty](Newtonsoft)和[JsonPropertyName](System.Text.Json),导致字段映射错乱
  • 排查是否存在循环引用,极端情况下循环引用可能不会直接抛异常,但会导致JSON输出结构错乱

二、针对两个序列化器的配置调整

1. Newtonsoft.Json(Json.NET)配置优化

如果是字段合并或格式异常,尝试以下配置:

var settings = new JsonSerializerSettings
{
    // 忽略循环引用,避免自动生成$ref导致的结构混乱
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
    // 使用默认命名策略,避免大小写转换导致的字段名匹配错误
    ContractResolver = new DefaultContractResolver { NamingStrategy = new DefaultNamingStrategy() },
    // 忽略空值字段,减少不必要的干扰
    NullValueHandling = NullValueHandling.Ignore,
    // 格式化输出JSON,方便排查具体问题(生产环境可关闭)
    Formatting = Formatting.Indented
};
var json = JsonConvert.SerializeObject(yourModel, settings);

如果发现字段值被意外覆盖,检查是否有多个属性标记了相同的[JsonProperty("xxx")]名称。

2. System.Text.Json配置优化

针对System.Text.Json的格式异常,调整配置如下:

var options = new JsonSerializerOptions
{
    // 忽略循环引用
    ReferenceHandler = ReferenceHandler.IgnoreCycles,
    // 禁用自动命名转换,保持属性名与JSON字段名严格一致
    PropertyNamingPolicy = null,
    // 序列化时忽略空值字段
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
    // 格式化输出便于排查问题
    WriteIndented = true
};
var json = JsonSerializer.Serialize(yourModel, options);

另外,示例中residencyMonths的值是字符串"60",如果API要求的是数字类型,检查模型中该属性是否为字符串类型,或者是否有自定义转换器导致类型转换错误,这种情况需要调整属性类型或添加对应类型转换器。

三、其他排查手段

  • 序列化后打印完整的JSON字符串,不要只看片段,确认具体是哪些字段发生了合并
  • 对比模型结构和API要求的JSON结构,检查是否有字段遗漏、多余或类型不匹配
  • 简化模型,只保留必要字段进行序列化测试,逐步定位出问题的属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:36:20