2013-04-22 120 views
12

我有一个JSON响应,我试图用RestSharp反序列化,它看起来是这样的:基于RestSharp反序列化JSON的阵列

{"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<DeviceContainer> 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<DevicesList>(request); 

何wever,response.Data是NULL,并且我尝试了其他变体而没有运气。

那么,什么类结构和映射应该用于这种情况?我也尝试过,没有额外的DeviceContainer班。

感谢您的帮助。

+0

可能是你应该加总,开始和计数属性deviceslist类。 – Vladimir 2013-04-22 21:14:16

回答

16

RestSharp 在性能运行时,它不会反序列化的字段,所以请确保您DevicesDevice领域转换为性能。

此外,请仔细检查响应的Content-Type,如果响应是非默认响应,则RestSharp可能完全不使用JsonDeserializer。见我在RestSharp client returns all properties as null when deserializing JSON response

+0

就是这样。愚蠢的错误忘记了'{get;组; }'。一旦我补充说,它完美运作。谢谢! – 2013-04-23 00:26:08

2

RestShartp不支持DataAnnotation /数据成员,没有少校重命名你的属性:

  • 设备 - >设备
  • 设备 - >设备

,不要忘了{get; set;} )。

21

答案我有一个稍微不同的问题,当我反序列化的POCO包含数组..

改变它Devices[]List<Devices>解决这个问题,它正确地反序列化。

+0

谢谢,刚刚碰到这个,你的修复解决了它 – mahonya 2015-02-04 18:56:05

+3

'IEnumerable <>'和'IList <>'也不管用。您需要'List <>' – 2015-09-25 10:42:50

3

我遇到的一件事情是,如果你使用如IEnumerable或IList这样的接口,它不起作用,它必须是一个具体的类型。

这将无法正常工作,因为它为其他json序列化程序(如json.net)所做的工作。

public class DevicesList 
{ 
    public IEnumerable<DeviceContainer> Devices { get; set; } 
} 

public class DeviceContainer 
{ 
    ... 
} 

它必须是这样的:

public class DevicesList 
{ 
    public List<DeviceContainer> Devices { get; set; } 
} 

public class DeviceContainer 
{ 
    ... 
} 
+0

如果您为JsonDeserializer使用更新版本的RESTSharp(例如不使用JSON.NET),这会有所帮助 – Skyguard 2015-06-12 19:49:30