使用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;} ;)。