JSON.Net错误地将二维数组序列化为一维

试图将二维数组转换为二维JSON.Net数组。

下面的代码有什么问题吗? 或者JSON.Net不支持这个吗?

var A = new int[2, 4] { { 1, 1, 1, 1 }, { 2, 2, 2, 2 } }; Console.WriteLine(JsonConvert.SerializeObject(A)); // CONSOLE: [1,1,1,1,2,2,2,2] // // NB. displays a one dimensional array // instead of two eg [[1,1,1,1],[2,2,2,2]] 

Javascript没有与C#相同的2Darrays概念。 为了获得类似于此处描述的数组,您需要创建一个数组数组。

 // output: [[1,1,1,1],[2,2,2,2]] var a = new int[][] { new[]{ 1, 1, 1, 1 }, new[]{ 2, 2, 2, 2 } }; 

更新:

听起来 JSON.NET现在将多维数组转换为JSON中的数组数组,因此OP中的代码将与您使用上面的代码一样工作。

从Json.Net 4.5开始支持Relase 8多维数组 。

所以你的例子现在可以工作并生成以下JSON:

 [ [ 1, 1, 1, 1 ], [ 2, 2, 2, 2 ] ] 

当你像你一样定义一个数组时,它不是一个矩阵,它具有两个维度的相同数组,这就是为什么SerializeObject将它序列化为同一个数组。

我很惊讶它的工作原理。 Json.NET不支持多维数组。 请改用锯齿状arrays。