【问题标题】:How to deserialize a collection with a collection with Newtonsoft.json?如何用 Newtonsoft.json 的集合反序列化集合?
【发布时间】:2021-08-12 13:05:20
【问题描述】:

我有一些包含数组的 Json 内容,其中每个项目都包含一个对象数组。我正在寻找一种将其转换为对象列表的方法。它只是具有 id 和 biCode 的对象是我所追求的,他们的父母对我来说并不重要 我尝试了https://json2csharp.com/ 网站,但根据输出我需要为每个父对象(“UselessText1”、“UselessText2”等)创建一个类,它们只包含 id 和 biCode。我尝试使用它,但是(正如我猜想的那样)它不起作用

它抛出此异常:无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“System.Collections.Generic.List`1[Root]”,因为该类型需要 JSON 数组(例如 [1,2,3]) 以正确反序列化。

这是json:

{
"UselessText1": [],
"UselessText2": [
    {
        "id": 2,
        "biCode": "Something useful"
    }
],
"UselessText3": [
    {
        "id": 3,
        "biCode": "Something useful"
    },
    {
        "id": 4,
        "biCode": "Something useful"
    }
]}

知道如何反序列化吗?我发现的任何谷歌结果都没有显示像我这样的情况。我可能不知道具体要搜索什么

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    试试这个

    var json=...your json string
    
    var deseializedJson = JsonConvert.DeserializeObject< Dictionary<string,UselessText[]>>(json);
    
    var output = JsonConvert.SerializeObject(deseializedJson);
    
       public class UselessText
        {
            public int id { get; set; }
            public string biCode { get; set; }
        }
    

    输出

    {"UselessText1":[],
    "UselessText2":[{"id":2,"biCode":"Something useful"}],
    "UselessText3":[{"id":3,"biCode":"Something useful"},{"id":4,"biCode":"Something useful"}]}
    

    【讨论】:

    • 完美,这正是我所需要的。谢谢你。这个解决方案对于我以后需要处理的数据更容易
    【解决方案2】:

    您的 Json 示例有点奇怪。看起来您有一个包含多个相同类型属性的对象。

    应该适用于这个确切的 Json 的东西是:

    public class MyModel{
        public IEnumerable<MyEntity> UselessText1;
        public IEnumerable<MyEntity> UselessText2;
        public IEnumerable<MyEntity> UselessText3;
    }
    
    public class MyEntity{
        public int Id;
        public string BiCode;
    }
    

    【讨论】:

    • 谢谢,这是一个很好的解决方案。我选择了 Serges 解决方案,因为他的解决方案对于我以后需要处理的数据更容易。您的解决方案当然仍然有效。你是对的,这是一个有点奇怪的 json,可能不是我会怎么做的。但是我不是json专家,最近才开始使用它
    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多