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类。

谢谢你的帮助

JSON数组的RestSharp反序列化

当我的反序列化POCO包含一个数组时,我遇到了一个稍微不同的问题。

将其从Devices[]改为List<Devices>解决了这个问题,并且正确地反序列化了

RestSharp 只有操作属性,它不反序列化为字段,所以确保将您的DevicesDevice字段转换为属性。

另外,仔细检查响应的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就足以让事情开始工作了。