如何反序列化 JSON 数据?C#.



我从API获取Json数据,我一直在尝试反序列化。

Json 数据:

{
   "items": [
      {
         "id": "1",
         "name": "samplename",
         "AddressList1": {
            "City": "Hyd",
            "State": "TN",
            "Country": "IN"
         },
         "Age": "10"
      },
      {
         "id": "2",
         "name": "samplename2",
         "AddressList1": {
            "City": "Hydd",
            "State": "TN",
            "Country": "IN"
         },
         "Age": "10"
      }
   ],
   "paging": {
      "cursors": {}
   }
}

实体:

public class AddressList1
{
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
}
public class Item
{
    public string id { get; set; }
    public string name { get; set; }
    public AddressList1 addressList1 { get; set; }
    public string Age { get; set; }
}
public class Cursors
{
}
public class Paging
{
    public Cursors cursors { get; set; }
}
public class Users
{
    public List<Item> items { get; set; }
    public Paging paging { get; set; }
}

C# 代码:

JsonConvert.DeserializeObject<List<Users>>(content);

错误信息:

无法反序列化当前 JSON 对象(例如 {"名称":"值"}) 类型为"System.Collections.Generic.List"1[Entity.Users]" 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。

我哪里做错了?

下面是一个 JSON 对象;在您的情况下是一个User

{ ... }

下面是一个 JSON 数组;在您的情况下是一个User数组

[ { ... }, { ... } ]

因此,如果您想反序列化您进入用户数组的 JSON,这是不可能的,因为您在 JSON 中没有数组。

因此,要反序列化的正确代码是:

JsonConvert.DeserializeObject<Users>(content);

此外,您的映射是错误的,因为在 JSON 中有一个属性AddressList1,而在类中它被称为addressList1

给定您的 JSON,您将需要一个包含项目成员和分页成员的 POCO 对象。

JsonConvert.DeserializeObject<Users>(content);

应该工作。

你的 Json 字符串格式很好,实体也符合 Json2Csharp 很好。

但是您的问题出在说明JsonConvert.DeserializeObject<List<Users>>(content);

您拥有的所有 JSON 只有一个用户,并且您正在尝试获取它们的列表,这就是问题,

您可以尝试使用:

JsonConvert.DeserializeObject<Users>(content);

尝试以下代码

JsonConvert.DeserializeObject<Users>(content);

您的实体(模型)看起来很好。例如,如果您正在使用或正在使用 Web API 2 ASP.NET 并且您的客户端正在使用 http 动词 post,则此设置将作为 Web API 负责对象反序列化的工作:

    public HttpStatusCode Post(Item item)
    {
       Debug.Write(item.toString());
       return HttpStatusCode.OK;
    }

如果您坚持手动反序列化,请使用 JavaScriptSerializer 库,它允许您执行以下操作:

Item item = new JavaScriptSerializer().Deserialize<Item>(content);

请注意,.Deserialize<T>()采用一个泛型,在您的情况下它Item

希望有帮助。

相关内容

  • 没有找到相关文章

最新更新