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

如何解析与反序列化JSON响应?JSON.NET反序列化失败求助

解析嵌套JSON字符串的JSON响应

问题本质

我之前也碰到过类似的情况,这其实是JSON结构的小陷阱:你的JSON里每个对象的value字段不是直接的嵌套JSON对象,而是一个被转义过的JSON字符串(里面的双引号都用\做了转义处理)。虽然JSON验证器判定它合法(这种转义写法完全符合JSON规范),但JSON.NET默认只会把value解析成普通的string类型,不会自动帮你把这个字符串再转成目标对象——这就是你觉得“反序列化器无法识别”的核心原因。

解决方案:分两步解析

我们可以通过两次反序列化来处理这个结构:先解析外层的数组结构,再把每个value字符串单独转成对应的对象。

1. 定义对应的实体类

首先要定义两个类,分别对应外层数组的元素,以及value字段里的JSON内容:

// 对应外层JSON数组的每个元素
public class DayEntry
{
    [JsonProperty("value")]
    public string Value { get; set; }
    
    [JsonProperty("nr")]
    public int Nr { get; set; }
}

// 对应value字段里的JSON对象
public class DayDetails
{
    [JsonProperty("code")]
    public string Code { get; set; }
    
    [JsonProperty("description")]
    public string Description { get; set; }
    
    [JsonProperty("isSet")]
    public bool IsSet { get; set; }
}

2. 执行两次反序列化操作

先把整个JSON数组转成List<DayEntry>,再遍历每个元素,把Value字段单独解析成DayDetails对象:

// 你的原始JSON字符串(实际代码里可以用@逐字字符串避免转义麻烦)
string rawJson = @"[
    {""value"":""{\""code\"":\""MO\"",\""description\"":\""Monday\"",\""isSet\"":false}"",""nr"":1},
    {""value"":""{\""code\"":\""TU\"",\""description\"":\""Tuesday\"",\""isSet\"":true}"",""nr"":2}
]";

// 第一步:解析外层的数组结构
var dayEntries = JsonConvert.DeserializeObject<List<DayEntry>>(rawJson);

// 第二步:解析每个value字段,组合成最终的目标列表
var finalDayList = dayEntries.Select(entry => new 
{
    Details = JsonConvert.DeserializeObject<DayDetails>(entry.Value),
    entry.Nr
}).ToList();

// 测试输出验证结果
foreach (var item in finalDayList)
{
    Console.WriteLine($"序号:{item.Nr},代码:{item.Details.Code},星期:{item.Details.Description}");
}

额外优化建议

如果有机会控制这个JSON的生成方,最好让value直接输出嵌套的JSON对象(去掉外层的引号和转义),这样就能一步完成反序列化,不用二次解析。比如理想的JSON结构应该是这样:

[
{"value":{"code":"MO","description":"Monday","isSet":false},"nr":1},
{"value":{"code":"TU","description":"Tuesday","isSet":true},"nr":2}
]

这种情况下,你只需要把DayEntry类里的Value类型改成DayDetails,就能直接反序列化得到想要的结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:24:24