19

我有一个 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课程。

谢谢您的帮助。

4

5 回答 5

33

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

将其更改Devices[]List<Devices>解决问题并正确反序列化。

于 2013-05-28T02:37:27.087 回答
18

RestSharp对属性进行操作,它不会反序列化为字段,因此请确保将您的DevicesDevice字段转换为属性。

此外,请仔细检查Content-Type响应,如果响应是非默认的,RestSharp 可能根本不使用 JsonDeserializer。反序列化 JSON 响应时,请参阅我在RestSharp 客户端上的答案将所有属性都返回为 null

于 2013-04-22T21:47:12.750 回答
4

我遇到的问题是,如果您使用的接口如: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
{
   ...
}
于 2015-02-17T00:44:35.973 回答
2

RestShartp 不支持 DataAnnotation/DataMember,重命名你的属性没有 maj:

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

并且不要忘记{get; set;};)。

于 2013-04-22T21:33:33.287 回答
0

我的问题完全不同,我天真地认为JsonDeserializer支持JsonProperty属性,但事实并非如此。所以当试图反序列化成

public class AvailableUserDatasApi
{
    [JsonProperty("available-user-data")]
    public List<AvailableUserDataApi> AvailableUserDatas { get; set; }
}

它失败了..但是更改AvailableUserDatasAvailableUserData足以让事情开始工作。

于 2019-10-14T22:35:51.450 回答