如何使用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
相关产品推荐
相关产品推荐

