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

如何将嵌套JSON数组反序列化为自定义类?(附示例代码)

嵌套数组反序列化解决方案

核心结论

不需要为TableRow单独编写转换器,只需完成TableJsonConverter的实现即可。因为TableRow的Elements属性已经通过[JsonProperty(ItemConverterType = typeof(ElementJsonConverter))]指定了元素转换器,Newtonsoft.Json会自动复用已有的ElementJsonConverter处理内层ElementData对象。

完整实现代码

修正后的Test2方法

先修正Test2中的两处错误:反序列化目标类型应为Message2,且JSON字符串缺少闭合括号:

void Test2()
{
   var msg2 = "{\"type\":\"message2\",\"data\":[[{\"type\":\"element1\",\"name\":\"myname\",\"amount\":0}]]}";
   var obj = JsonConvert.DeserializeObject<Message2>(msg2);
}

完成TableJsonConverter实现

public class TableJsonConverter : JsonConverter<Table>
{
    public override Table ReadJson(JsonReader reader, Type objectType, Table existingValue, bool hasExistingValue, Newtonsoft.Json.JsonSerializer serializer)
    {          
        // 读取JSON中的二维数组
        var jArray = JArray.Load(reader);
        
        var table = new Table();
        table.Steps = new List<TableRow>();
        
        // 遍历外层数组的每个元素,转换成TableRow对象
        foreach (var innerArray in jArray)
        {
            var row = new TableRow();
            // 利用传入的序列化器反序列化内层数组,自动应用ElementJsonConverter
            row.Elements = serializer.Deserialize<List<ElementData>>(innerArray.CreateReader());
            table.Steps.Add(row);
        }
        
        return table;
    }

    public override void WriteJson(JsonWriter writer, Table value, Newtonsoft.Json.JsonSerializer serializer)
    {
        // 如需序列化,反向将Table转换为二维数组格式
        var jArray = new JArray();
        foreach (var row in value.Steps)
        {
            var innerArray = JArray.FromObject(row.Elements, serializer);
            jArray.Add(innerArray);
        }
        jArray.WriteTo(writer);
    }
}

原理说明

  1. TableJsonConverter负责将JSON中的二维数组[[...]]映射为Table对象的Steps集合:外层数组的每个元素对应一个TableRow,内层数组直接通过序列化器反序列化为TableRow.Elements。
  2. 由于TableRow.Elements已经标记了ItemConverterType = typeof(ElementJsonConverter),序列化器在反序列化内层数组时,会自动调用ElementJsonConverter处理每个ElementData子类对象,无需额外编写转换器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:52:37