列表省略标记的C#JSON列表

时间:2019-02-14 23:37:27

标签: c# arrays json

我想创建一个JSON proto3兼容的字符串,其中包括如下部分:

"foo": [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]

我不知道该怎么做。这似乎是一个List<List<T>>问题(已经discussed),但是当我向Newtonsoft Json.NET提供这种解决方案时,我得到了:

"foo": [ "bar": [1.0, 2.0], "bar": [3.0, 4.0], "bar": [5.0, 6.0]]

我只尝试了“ Newtonsoft Json.NET”,但是这个问题对任何其他JSON库或自定义编码方法都是开放的。该怎么办?

编辑: 这是一个序列化问题。我无法控制解串器代码。

2 个答案:

答案 0 :(得分:2)

我不确定您要去哪里出错,但是以下代码可以正常运行:

var lists = new List<List<double>>
{
    new List<double> {1.0, 2.0},
    new List<double> {3.0, 4.0}
};
var test = (lists, "test");
Console.Write(JsonConvert.SerializeObject(test));

输出:

{"Item1":[[1.0,2.0],[3.0,4.0]],"Item2":"test"}

您可以用一些示例代码来编辑帖子吗?

答案 1 :(得分:1)

尝试一下:

string str = "{ \"foo\": [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]] }";
var mytype = new { foo = new List<List<decimal>>() };
var mydeserializedtype = JsonConvert.DeserializeAnonymousType(str, mytype);
string str2 = JsonConvert.SerializeObject(mydeserializedtype);

或更经典

class myclass
{
 public List<List<decimal>> foo { get; set; }
}
….
string str = "{ \"foo\": [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]] }";
myclass my = JsonConvert.DeserializeObject<myclass>(str);
string str2 = JsonConvert.SerializeObject(my);