繁体   English   中英

带有JSON数组的RestSharp反序列化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM