使用JSON数组进行RestSharp反序列化
我有一个JSON响应,我正在尝试使用RestSharp反序列化 ,它看起来像这样:
{"devices":[{"device":{"id":7,"deviceid":"abc123","name":"Name"}}, {"device":{"id":1,"deviceid":"def456","name":"Name"}}], "total":2, "start":0, "count":2}
根据我发现的一些建议,我试图像这样设置我的POCO:
public class DevicesList { public List Devices; } public class DeviceContainer { public Device Device; } public class Device { public int Id { get; set; } public string DeviceId { get; set; } public string Name { get; set; } }
然后我的执行看起来像这样:
// execute the request var response = client.Execute(request);
但是, response.Data
为NULL,我尝试了其他变种而没有运气。
那么,这种情况应该使用什么类结构和映射? 我没有额外的DeviceContainer
类也试过这个。
谢谢您的帮助。
RestSharp 仅对属性进行操作,不会反序列化为字段,因此请确保将“ Devices
和“ Device
字段转换为属性。
另外,仔细检查响应的Content-Type
,如果响应是非默认的,则RestSharp可能根本不使用JsonDeserializer。 请参阅我在RestSharp客户端上的答案, 在反序列化JSON响应时将所有属性返回为null
当我的反序列化POCO包含一个数组时,我遇到了一个稍微不同的问题。
将它从Devices[]
更改为List
解决了问题并正确反序列化。
我碰到的是,如果您使用的接口如:IEnumerable或IList,则它不起作用,它必须是具体类型。
这不会起作用,就像json.net这样的其他json序列化器一样。
public class DevicesList { public IEnumerable Devices { get; set; } } public class DeviceContainer { ... }
它必须是这样的:
public class DevicesList { public List Devices { get; set; } } public class DeviceContainer { ... }
RestShartp不支持DataAnnotation / DataMember,重命名没有maj的属性:
- 设备 – >设备
- 设备 – >设备
并且不要忘记{get; set;}
{get; set;}
;)。