c# - 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);
我究竟做错了什么?
解决方案
正如错误所说,反序列化器无法将数组反序列化为需要object的类。您的 JSON 响应实际上是一个对象的数组,因此必须反序列化。
您需要将响应反序列化为数组或列表,JsonClasses.Item
而不是单个,例如:
List<JSonClasses.Item> items = JsonConvert.DeserializeObject<List<JSonClasses.Item>>(response.Content);
作为附加说明,"Odid"
您发布的响应正文和OrgId
您的 Item 类之间存在不匹配,这可能会导致您的反序列化仍然失败。
推荐阅读
- docker - 带有 docker-compose 的 DynamoDB Local 无法正常工作
- c - C 中从 8 个不同字节中提取 8 位的最快方法是什么?
- node.js - Oneliner 在 python 或 node.js 中运行一个 adhock 网络服务器,从当前目录提供渲染的降价?
- javascript - 什么时候应该使用对象属性简写?
- python - 将包含十六进制和 ASCII 的字符串解码为十进制
- php - 将 EntityManager 从另一个服务注入到一个服务中
- c++ - 按位与:为什么我会得到这种行为?
- apache-nifi - 我可以将 Apache Nifi 用作 ESB 或请求中介吗?
- react-native - Firebase react native-无法从firestore获取文档字段以显示在react native应用程序中
- json - 在 JSON (Python) 中查找某个元素的数量