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

C# JsonConvert反序列化嵌套同类型JSON报错解决方案

问题根因

反序列化失败是因为JSON中递归嵌套的Part字段格式不统一:部分层级Part是单个JSON对象,部分层级是对象数组,而定义的List<PartObj>类型仅支持反序列化数组格式,遇到单个对象时就会抛出类型匹配异常。

处理方案

通过自定义JSON转换器兼容两种格式的Part字段,无需调整业务层实体的属性设计,以Newtonsoft.Json为例实现步骤如下:

  • 编写自定义列表转换器,自动识别当前JSON节点类型,单个对象自动包装为单元素集合,数组直接正常反序列化:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;

public class FlexiblePartListConverter : JsonConverter<List<PartObj>>
{
    public override List<PartObj> ReadJson(JsonReader reader, Type objectType, List<PartObj> existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JToken currentToken = JToken.Load(reader);
        return currentToken.Type switch
        {
            JTokenType.Array => currentToken.ToObject<List<PartObj>>(serializer),
            JTokenType.Object => new List<PartObj> { currentToken.ToObject<PartObj>(serializer) },
            _ => new List<PartObj>()
        };
    }

    public override void WriteJson(JsonWriter writer, List<PartObj> value, JsonSerializer serializer)
    {
        if (value?.Count == 1)
        {
            JToken.FromObject(value[0], serializer).WriteTo(writer);
            return;
        }
        JToken.FromObject(value ?? new List<PartObj>(), serializer).WriteTo(writer);
    }
}
  • 在PartObj类的Part属性上标记转换器特性,指定使用自定义转换器处理该字段:
public class PartObj
{
    public string Name { get; set; }
    public string Rev { get; set; }
    public string Title { get; set; }
    public string current { get; set; }
    [JsonConverter(typeof(FlexiblePartListConverter))]
    public List<PartObj> Part { get; set; }
}

public class Response
{
    public PartObj Part { get; set; }
}

public class Root
{
    public Response Response { get; set; }
}
  • 原有反序列化逻辑无需修改,直接执行即可正确解析所有层级的嵌套Part结构:
Root items = JsonConvert.DeserializeObject<Root>(jsonStr);

如果你使用的是System.Text.Json序列化库,逻辑完全一致,仅需继承System.Text.Json.Serialization.JsonConverter<T>实现对应转换逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:31:29