使用JSON数组进行RestSharp反序列化

Gar*_*ger 19 c# json restsharp

我有一个JSON响应,我正在尝试使用RestSharp反序列,它看起来像这样:

{"devices":[{"device":{"id":7,"deviceid":"abc123","name":"Name"}},
            {"device":{"id":1,"deviceid":"def456","name":"Name"}}],
 "total":2,
 "start":0,
 "count":2}
Run Code Online (Sandbox Code Playgroud)

基于我发现的一些建议,我试图像这样设置我的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; }
}
Run Code Online (Sandbox Code Playgroud)

然后我的执行看起来像这样:

// execute the request
var response = client.Execute<DevicesList>(request);
Run Code Online (Sandbox Code Playgroud)

但是,response.Data是NULL,我尝试了其他变种没有运气.

那么,这种情况应该使用什么类结构和映射?我没有额外的DeviceContainer课程也试过这个.

谢谢您的帮助.

Boy*_*ycs 29

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

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

  • `IEnumerable <>`和`IList <>`也不起作用.你需要`List <>` (3认同)

Pet*_*ete 18

RestSharp 只有在性能运行时,它不会反序列化领域,所以一定要确保你的转化DevicesDevice字段属性.

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


loc*_*obr 5

我遇到的问题是,如果您使用 IEnumerable 或 IList 等接口,它就不起作用,它必须是具体类型。

这将不起作用,就像其他一些 json 序列化程序(例如 json.net)一样。

public class DevicesList
{
    public IEnumerable<DeviceContainer> Devices { get; set; }
}

public class DeviceContainer
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

它必须是这样的:

public class DevicesList
{
    public List<DeviceContainer> Devices { get; set; }
}

public class DeviceContainer
{
   ...
}
Run Code Online (Sandbox Code Playgroud)