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

API返回JSON表对象数组反序列化失败问题咨询

问题分析与解决方案

你遇到反序列化返回null的问题,核心原因有两个:

  • 类结构完全不匹配JSON层级:你的DataConvert类直接定义了Data[] data,但原始JSON最外层是包含tables数组的对象,两者结构完全不对等,序列化器找不到对应字段,自然返回null。
  • 字段拼写错误:Data类里的daat2应该是data2,就算结构匹配,这个拼写错误也会导致该字段无法正确赋值。

第一步:创建匹配原始JSON结构的类

要先正确解析原始JSON,你需要定义对应层级的类:

// 最外层根对象,对应JSON的顶级结构
public class RootObject
{
    public List<Table> tables { get; set; }
}

// 对应JSON中tables数组的每个元素
public class Table
{
    public string name { get; set; }
    public List<Column> columns { get; set; }
    public List<List<string>> rows { get; set; }
}

// 对应columns数组的每个元素
public class Column
{
    public string name { get; set; }
    public string type { get; set; }
}

// 修正拼写后的目标数据类
public class Data
{
    public string data1 { get; set; }
    public string data2 { get; set; } // 修正了daat2的拼写错误
    public string data3 { get; set; }
}

第二步:反序列化后手动映射到Data对象数组

原始JSON中的rows是二维字符串数组,不是直接的Data对象数组,所以需要手动将每行数据映射到Data实例:

// 先反序列化到RootObject
var root = JsonConvert.DeserializeObject<RootObject>(json);

// 找到PrimaryResult表(假设你只需要这个表的数据)
var primaryTable = root.tables.FirstOrDefault(t => t.name == "PrimaryResult");
if (primaryTable == null)
{
    // 处理表不存在的情况
    return null;
}

// 将rows映射到Data数组
var dataList = new List<Data>();
foreach (var row in primaryTable.rows)
{
    var data = new Data();
    // 根据columns的顺序对应赋值
    data.data1 = row[0];
    data.data2 = row[1];
    data.data3 = row[2];
    dataList.Add(data);
}

// 最终得到目标Data数组
Data[] dataArray = dataList.ToArray();

更灵活的映射方式(适配columns顺序变化)

如果columns的顺序可能变动,你可以通过列名与索引的对应关系来映射,避免硬编码索引:

// 创建列名到索引的字典
var columnIndexMap = primaryTable.columns.Select((col, index) => new { col.name, index })
                                         .ToDictionary(x => x.name, x => x.index);

var dataList = new List<Data>();
foreach (var row in primaryTable.rows)
{
    var data = new Data();
    data.data1 = row[columnIndexMap["data1"]];
    data.data2 = row[columnIndexMap["data2"]];
    data.data3 = row[columnIndexMap["data3"]];
    dataList.Add(data);
}

这种方式鲁棒性更强,就算columns的顺序调整,也能正确完成字段赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:57:07