首页 > 解决方案 > JSON数组响应REST API,提取数据时出错c#

问题描述

我正在尝试从响应中提取信息,但是在尝试 DeserializeObject 时出现以下错误。

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'JSonClasses+Item',因为该类型需要 JSON 对象(例如 {\"name\":\"value\"})才能正确反序列化。

我的回应是:

[{"Odid":45606,"UserId":22728,"FirstName":"FirstName ","MiddleName":null,"LastName":"LastName","UserName":"FirstName.LastName","ExternalEmail":"email@yahoo.com","DefinedId":"12345","UniqueIdentifier":"null","Activation":{"IsActive":true},"DisplayName":"FirstName LastName"}]

这是我尝试反序列化此响应的方式:

public class Activation
{
    public bool IsActive { get; set; }
}

public class Item
{
    public int OrgId { get; set; }
    public int UserId { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string UserName { get; set; }
    public string ExternalEmail { get; set; }
    public string OrgDefinedId { get; set; }
    public string UniqueIdentifier { get; set; }
    public Activation Activation { get; set; }
    public string DisplayName { get; set; }
}


var responceID= JsonConvert.DeserializeObject<JSonClasses.Item>(response.Content);

我也尝试使用以下方法将其转换为 Dynamic 对象,然后尝试将数据提取到 Item 类中,但出现相同的错误:

dynamic response2 = JsonConvert.DeserializeObject(response.Content); 

我究竟做错了什么?

标签: c#asp.netjsonapiserialization

解决方案


正如错误所说,反序列化器无法将数组反序列化为需要object的类。您的 JSON 响应实际上是一个对象的数组,因此必须反序列化。

您需要将响应反序列化为数组或列表,JsonClasses.Item而不是单个,例如:

List<JSonClasses.Item> items = JsonConvert.DeserializeObject<List<JSonClasses.Item>>(response.Content);

作为附加说明,"Odid"您发布的响应正文和OrgId您的 Item 类之间存在不匹配,这可能会导致您的反序列化仍然失败。


推荐阅读