【问题标题】:Proper way to deserialize multidimensional JSON using JSON.NET in C#在 C# 中使用 JSON.NET 反序列化多维 JSON 的正确方法
【发布时间】:2017-04-29 16:18:12
【问题描述】:

我花了很多时间研究如何反序列化这个 json 文件:

{  
"clients":[  
  {  
     "id":"a0ece5db-cd14-4f21-812f-966633e7be86",
     "name":"Britney",
     "email":"britneyblankenship@quotezart.com",
     "role":"admin"
  },
  {  
     "id":"e8fd159b-57c4-4d36-9bd7-a59ca13057bb",
     "name":"Manning",
     "email":"manningblankenship@quotezart.com",
     "role":"admin"
  },
  {  
     "id":"a3b8d425-2b60-4ad7-becc-bedf2ef860bd",
     "name":"Barnett",
     "email":"barnettblankenship@quotezart.com",
     "role":"user"

     [ ... ]

这是我的控制器代码:

 using (var sr = new StreamReader(response.GetResponseStream()))
{
    receivedData = sr.ReadToEnd();
}

var userList = JsonConvert.DeserializeObject<List<User>>(receivedData);

foreach (User us in userList)
{
   //this method just print the user Id
   MsgBox(u.Id);
}

所以,我完全被卡住了,因为 Json

JsonConvert.DeserializeObject>(receivedData);启动 以下异常:

Newtonsoft.Json.JsonSerializationException: '无法反序列化 当前 JSON 对象(例如 {"name":"value"})转换为类型 'System.Collections.Generic.List`1[InsuranceWebAPI.Models.User]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。

我尝试将 json 数据设置为数组和列表,但不起作用。 我知道这可能是一个非常初学者的问题,但我不习惯使用 Json 和 Json.net

任何机构都可以帮助我将数据放入数组或列表中。

提前感谢大家,如果我不能正确理解有关 Json.net 的其他问题,请见谅

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    那是因为您的 JSON 格式不是用户的集合。它是一个包含名为clients 的属性的对象,该属性是用户的集合。查看此模型:

    public class RootObject
    {
        public IEnumerable<User> clients { get; set; }
    }
    public class User
    {
        public string id { get; set; }
        public string name { get; set; }
        public string email { get; set; }
        public string role { get; set; }
    }
    

    然后通过执行这个:

    var data = JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(receivedData));
    

    【讨论】:

    • 有效!买我不能以数组的形式访问数据,也许我问了一个不同的问题,我该如何操作数据变量中的客户端数据,将其存储到一个类中?
    • @MadDev - 不明白当前的问题
    • @MadDev - 如果您需要将clients 用作数组或列表,您可以将其从IEnumerable&lt;User&gt; 更改为List&lt;User&gt; 或User[],它仍然可以工作。
    • 算了@Gilad Green,今天学习和工作的时间太多了 :( 你真的帮了我大忙。非常感谢!
    • 那是真的@Gilad Green,似乎使用 IEnumerable 更方便,最后代码工作正常,现在我在用 TextArea 填充数据时遇到问题 呵呵……但这是另一个问题... ;-) 如果您可以检查,这是链接:stackoverflow.com/questions/43698982/…
    【解决方案2】:

    或者..

            dynamic userList = JsonConvert.DeserializeObject(File.ReadAllText("file.js"));
    
            foreach (var user in userList.clients)
            {
                ///MessageBox.Show(user.id);
                Console.WriteLine(user.id);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多