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

C# JSON.Net错误地将二维数组序列化为一维数组,c#,.net,json.net,C#,.net,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. displ

正在尝试将二维数组转换为二维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 e.g. [[1,1,1,1],[2,2,2,2]]

当你像以前那样定义一个数组时,它不是一个矩阵,而是一个二维数组
这就是为什么SerializeObject将其序列化为相同的数组。

Javascript没有与C#相同的2D数组概念。为了获得所描述的数组,您需要创建一个数组数组

// 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不支持多维数组。改用锯齿状数组。

从开始

因此,您的示例现在可以工作并生成以下JSON:

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

+1:那我就玩一个二维数组到锯齿数组的转换吧。也许这样就行了。这个答案已经过时了。见@Timm'sbelow@RobertLevy:谢谢你提醒我这件事。。。我认为矩阵和2d数组在概念上是一样的。。。所以我觉得很难理解。你的意思是在底层的.net表示方面?你能给出它不支持这个的原因吗?这是因为从JSON转换回JSON时存在歧义吗?