使用JSON数组的RestSharp示例化

yr9zkbsy  于 2023-10-21  发布在  其他
关注(0)|答案(6)|浏览(138)

我有一个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,我尝试了其他变体,但没有成功。
那么,在这种情况下应该使用什么样的类结构和Map呢?我也尝试过不使用额外的DeviceContainer类。
谢谢你的帮助

aiazj4mn

aiazj4mn1#

我有一个稍微不同的问题时,我的封装POCO包含一个数组..
将其从Devices[]更改为List<Devices>解决了问题,并正确地进行了验证。

mkshixfv

mkshixfv2#

RestSharp only 对属性进行操作,它不会转换为字段,因此请确保将DevicesDevice字段转换为属性。
另外,仔细检查响应的Content-Type,如果响应是非默认的,RestSharp可能根本不使用Jsonalizer。请参阅我在RestSharp客户端上的回答,当解析JSON响应时,所有属性都返回为null

mklgxw1f

mklgxw1f3#

我遇到的事情是,它不工作,如果你使用的接口,如:IELTS或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
{
   ...
}
bhmjp9jg

bhmjp9jg4#

RestShartp不支持DataAnnotation/DataMember,请重命名您的属性,但不要使用maj:

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

不要忘记{get; set;};).

daupos2t

daupos2t5#

我的问题完全不同,我天真地认为JsonDeserializer支持JsonProperty属性,但事实并非如此。因此,当试图将

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

它失败了。.但是将AvailableUserDatas更改为AvailableUserData足以让事情开始工作。

t0ybt7op

t0ybt7op6#

在.Net Core中,你可以使用native attribute(因为Newtonsoft已被弃用):

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

因此,可以使用您想要的任何属性名称。

相关问题