【问题标题】:C# JSON list of list omittings tags列表省略标记的 C# JSON 列表
【发布时间】:2019-02-14 23:37:27
【问题描述】:

我想创建一个符合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 库或自定义编码方法都是开放的。如何做到这一点?

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

【问题讨论】:

    标签: c# arrays json


    【解决方案1】:

    我不确定你哪里出错了,但是下面的代码可以正常工作:

    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"}
    

    你能用一些示例代码编辑你的帖子吗?

    【讨论】:

    • 其实这个看起来很不错。把剩下的情人节给我,我会尽快确认。
    【解决方案2】:

    试试这个:

    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);
    

    【讨论】:

    • 嗯,其实我想序列化而不是反序列化。我以为我说清楚了,但我会编辑。
    • deserialize 与反序列化完全相反。这意味着如果您找到将导致反序列化的类,您就知道要实例化什么对象以产生正确的序列化。这个答案通过将 str 反序列化为 my 然后将 my 反序列化为 str2 来向您展示这个概念。糟糕的选择或 var 名称,但仍然是解决方案的明确路径。如何序列化的唯一答案就是学习如何反序列化,这使得所有关于序列化的问题在我眼中都是如何反序列化的重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2010-12-14
    • 2021-06-24
    相关资源
    最近更新 更多