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

使用Newtonsoft JSON.NET反序列化被两次序列化的对象问题

解决Newtonsoft JSON.NET反序列化失败的问题

咱们来拆解下你遇到的这个问题——你提供的这段JSON确实存在序列化错误,这正是导致你无法直接反序列化为具体类型的核心原因。

问题定位

你看这段JSON里的D16字段:它的值是一个被双引号包裹、内部引号用\转义的字符串化JSON片段,而不是直接的嵌套JSON对象。正常情况下,如果D16对应一个包含OptionsList的实体,它应该直接是{ "OptionsList": [...], ... }的结构,而非被字符串包裹的形式。这种错误会让JSON.NET无法识别其对应的对象类型。

另外还要注意:你提供的JSON末尾有null...截断标记,实际反序列化时必须确保JSON是完整的,否则也会失败。


解决方法一:修复源JSON(推荐)

如果能控制生成这段JSON的源头,直接修正结构,把D16值的外层双引号和转义符去掉,让它成为合法的嵌套对象。修复后的JSON如下:

{
  "D16": {
    "OptionsList": [
      {
        "Id": 0,
        "Value": "Yes",
        "IsHighlighted": false,
        "Color": "",
        "FieldsToProcess": []
      },
      {
        "Id": 1,
        "Value": "No",
        "IsHighlighted": false,
        "Color": "",
        "FieldsToProcess": []
      }
    ],
    "SingleSelectedOption": null
  }
}

之后定义对应实体类,就能直接反序列化:

public class Option
{
    public int Id { get; set; }
    public string Value { get; set; }
    public bool IsHighlighted { get; set; }
    public string Color { get; set; }
    public List<string> FieldsToProcess { get; set; }
}

public class D16Content
{
    public List<Option> OptionsList { get; set; }
    public object SingleSelectedOption { get; set; } // 可根据实际类型替换为具体类
}

public class RootObject
{
    public D16Content D16 { get; set; }
}

// 反序列化代码
var fixedJson = "修复后的完整JSON字符串";
var result = JsonConvert.DeserializeObject<RootObject>(fixedJson);

解决方法二:无法修改源JSON时的临时方案

如果没办法调整源JSON,我们可以分两步反序列化:

  1. 先把整个JSON反序列化为临时类,接收D16的字符串值;
  2. 再单独把D16的字符串内容反序列化为目标实体类。

代码示例:

// 临时类,用于接收原始JSON结构
public class TempRoot
{
    public string D16 { get; set; }
}

// 目标实体类和方法一中的Option、D16Content一致

// 第一步:反序列化到临时类
var originalJson = "你提供的原始JSON字符串";
var tempResult = JsonConvert.DeserializeObject<TempRoot>(originalJson);

// 第二步:把D16的字符串内容反序列化为目标类型
var d16Content = JsonConvert.DeserializeObject<D16Content>(tempResult.D16);

这样就能绕过源JSON的序列化错误,成功得到你需要的对象了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:08:46