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

如何使用LitJSON在C#中反序列化二维数组JSON

问题:使用LitJSON反序列化二维数组JSON到C#的Position[,]类型

我有如下二维数组格式的JSON数据:

[
    [{"x":35.77778,"y":206.8565,"z":0},{"x":80.5,"y":206.8565,"z":0}],
    [{"x":35.77778,"y":206.8565,"z":0},{"x":80.5,"y":206.8565,"z":0}]
]

我定义了如下C#类:

public class Position 
{
    public float x { get; set; }
    public float y { get; set; }
    public float z { get; set; }
}

我希望将该JSON转换为Position[,]类型,使用LitJSON编写了如下代码:

string s = "[ [{ \"x\":35.77778,\"y\":206.8565,\"z\":0},{ \"x\":80.5,\"y\":206.8565,\"z\":0}], [{ \"x\":35.77778,\"y\":206.8565,\"z\":0},{ \"x\":80.5,\"y\":206.8565,\"z\":0}] ]";
Position[,] pss = JsonMapper.ToObject<Position[,]>(s);

但运行出错,错误提示为**"Position can't act as an array"**。

JsonMapper.ToObject可以正常处理一维数组JSON,例如:

string s = "[{ \"x\":35.77778,\"y\":206.8565,\"z\":0},{ \"x\":80.5,\"y\":206.8565,\"z\":0}]";
Position[] ps = JsonMapper.ToObject<Position[]>(s);

解决方案

LitJSON原生不直接支持反序列化到多维数组(如Position[,]),但可以通过先反序列化为交错数组(Position[][]),再手动转换为多维数组的方式解决。

步骤1:反序列化为交错数组

先将JSON转换为Position[][]类型,这是LitJSON支持的格式,和JSON的嵌套数组结构完全匹配:

string s = "[ [{ \"x\":35.77778,\"y\":206.8565,\"z\":0},{ \"x\":80.5,\"y\":206.8565,\"z\":0}], [{ \"x\":35.77778,\"y\":206.8565,\"z\":0},{ \"x\":80.5,\"y\":206.8565,\"z\":0}] ]";
Position[][] jaggedArray = JsonMapper.ToObject<Position[][]>(s);

步骤2:将交错数组转换为多维数组

遍历交错数组,将元素复制到Position[,]中:

// 获取交错数组的行数和列数
int rows = jaggedArray.Length;
int cols = jaggedArray[0].Length;

// 初始化多维数组
Position[,] multiArray = new Position[rows, cols];

// 复制元素
for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        multiArray[i, j] = jaggedArray[i][j];
    }
}

补充说明

  • 若JSON中每行的元素数量不一致,需要额外添加边界判断,避免出现索引越界错误。
  • 交错数组是"数组的数组",天然适配JSON的嵌套数组结构,因此LitJSON能直接解析;而多维数组是矩形结构,LitJSON没有内置的反序列化逻辑支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:27