【问题标题】:Populate JSON List To C# Object将 JSON 列表填充到 C# 对象
【发布时间】:2015-11-12 18:49:46
【问题描述】:

我正在尝试将 JSON/XML 字符串填充到 C# 对象中。 我将我的 XML 转换为 JSON,然后使用 JSON.NET。示例:

JSON 字符串

{  
"persons":[  
  {  
     "age":30,
     "name":"david",
     "hobbies":[  
        {  
           "name":"tennis",
           "hours":5
        },
        {  
           "name":"football",
           "hours":10
        }
     ]
  },
  {  
     "name":"adam",
     "age":23,
     "hobbies":[]
  }
]
}

C# 类

public class Hobbies
{
    public string name;
    public int hours;
}

class Person
{
    public string name;
    public int age;
    public List<Hobbies> hoobies = new List<Hobbies>();
}

我正在尝试将数据填充到人员列表中:

List<Person> persons = new List<Person>();
JsonConvert.PopulateObject(myJsonText, persons);

我得到了这个例外:

无法将 JSON 对象填充到类型上

我该怎么做?

【问题讨论】:

    标签: c# json xml json.net converter


    【解决方案1】:

    这是 JSON 对象的表示:

    {
      "key":"value"
    }
    

    这里是一个对象的集合/数组/列表的表示

    [
        {
          "key":"value"
        },
        {
          "key2":"value2"
        }
    ]
    

    所以您的JSON 字符串不代表Person 类的数组或集合。它表示具有Persons 属性的对象,该属性是Person 对象的集合。

    要将其解析为List&lt;Person&gt;,请删除最外层的{ },然后尝试。

    您的 JSON 应该如下所示

    [
        {
            "age": 30,
            "name": "david",
            "hobbies": [
                {
                    "name": "tennis",
                    "hours": 5
                },
                {
                    "name": "football",
                    "hours": 10
                }
            ]
        },
        {
            "name": "adam",
            "age": 23,
            "hobbies": []
        }
    ]
    

    然后像这样反序列化它

    var result = JsonConvert.DeserializeObject<List<Person>>(json);
    

    【讨论】:

      【解决方案2】:

      你需要一个根对象

      public class Root
      {
          public List<Person> Persons {set;get;}
      }
      

      现在你可以反序列化了

      var yourObj = JsonConvert.DeserializeObject<Root>(json);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多