[英]RestSharp Deserialization with JSON Array
我有一个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<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);
但是, response.Data
为NULL,并且我尝试了其他变体而没有运气。
那么,在这种情况下应该使用什么类结构和映射? 我也尝试过没有额外的DeviceContainer
类。
谢谢您的帮助。
当我的反序列化POCO包含一个数组时,我遇到了一个稍微不同的问题。
将其从Devices[]
更改为List<Devices>
解决此问题,并且可以正确地反序列化。
RestSharp 仅在属性上运行,不会反序列化为字段,因此请确保将“ Devices
和“ Device
字段转换为属性。
另外,请仔细检查响应的Content-Type
,如果响应不是默认值,则RestSharp可能根本不使用JsonDeserializer。 在反序列化JSON响应时,请参阅我在RestSharp客户端上的回答, 将所有属性返回为null
我遇到的一个问题是,如果您使用诸如IEnumerable或IList之类的接口,则它不起作用,它必须是具体类型。
这将无法正常工作,就像其他一些json.net之类的json序列化程序那样。
public class DevicesList
{
public IEnumerable<DeviceContainer> Devices { get; set; }
}
public class DeviceContainer
{
...
}
它必须是这样的:
public class DevicesList
{
public List<DeviceContainer> Devices { get; set; }
}
public class DeviceContainer
{
...
}
RestShartp不支持DataAnnotation / DataMember,请重命名您的属性,不要使用maj:
并且不要忘记{get; set;}
{get; set;}
;)。
我的问题完全不同,我天真地认为JsonDeserializer
支持JsonProperty
属性,但是那不是真的。 所以当尝试反序列化为
public class AvailableUserDatasApi
{
[JsonProperty("available-user-data")]
public List<AvailableUserDataApi> AvailableUserDatas { get; set; }
}
它失败了。但是将AvailableUserDatas
更改为AvailableUserData
就足以开始工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.