JSON数组的RestSharp反序列化
本文关键字:反序列化 RestSharp 数组 JSON | 更新日期: 2023-09-27 18:10:37
我有一个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序列化器,如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
{
...
}
RestShartp不支持DataAnnotation/DataMember,重命名你的属性:
- Devices -> Devices
- Device -> Device
不要忘记{get; set;}
;)。
我的问题完全不同,我天真地认为JsonDeserializer
支持JsonProperty
属性,但事实并非如此。所以当试图反序列化到
public class AvailableUserDatasApi
{
[JsonProperty("available-user-data")]
public List<AvailableUserDataApi> AvailableUserDatas { get; set; }
}
失败. .但是将AvailableUserDatas
更改为AvailableUserData
就足以让事情开始工作了。