【问题标题】:RestSharp deserialize to List<MyClass>RestSharp 反序列化为 List<MyClass>
【发布时间】:2018-08-16 09:25:18
【问题描述】:

我使用 RestSharp 从某个页面获取 json。回复是这样的:

{
    "cars": [
        {
            "name": "car1",
            "size": 10,
            "color": "black"
        },
        {
            "name": "car2",
            "size": 20,
            "color": "white"
        }
    ]
}

我有一辆车的课程:

public class Car
    {
      public string Name { get; set; }
      public int Size { get; set; }
      public string Color { get; set; }
    }

如何将此响应映射到汽车列表?

如果 json 中没有"cars":[,这很容易,但现在我需要这样做:

private class Cars
    {
      public List<Car> Cars { get; set; }
    }

    ...

    IRestResponse<Cars> response = client.Execute<Cars>(request);
    ...
    ...response.Data.Cars...

但我觉得 Cars 类没用,我想做这样的事情:

IRestResponse<List<Car>> response = client.Execute<List<Car>>(request);
...
...response.Data...

编辑:

这是用于创建请求的:

RestClient client = new RestClient(http...));
        RestRequest request = new RestRequest();

【问题讨论】:

  • 向我们展示您反序列化的代码
  • 就是这样。 Execute() 对其进行反序列化并将其映射到 类。
  • 我觉得this是你想要的
  • @FilipCordas 覆盖或下一个库可以提供帮助,但它比创建我现在拥有的 Cars 类更困难,因此对于这种情况也是无用的。
  • @Prasadtelkikar 如果我把 json 放到 [],会不会是 cars[]car[]?我只需要汽车[]。而且我不想使用一些外部解串器,因为这比拥有我的 Cars 课程更困难。

标签: c# .net json rest restsharp


【解决方案1】:

假设只有一个“汽车”数组,下面的代码将完成这项工作。

var response = client.Execute<Dictionary<string,List<Car>>>(request);

//You can access cars this way.
var data = response.Data["cars"];

【讨论】:

  • 谢谢!基于这个想法,我尝试了 KeyValuePair> 但它不起作用,所以我使用了你的解决方案
  • 没错!谢谢。
【解决方案2】:

我不知道这是否正是您正在寻找的,但我发现这种方式在使用 json 时非常舒服(JSonConvert 在 NewtownSoft.Json 包中)

dynamic dynamicObject = JsonConvert.DeserializeObject(jsonString);
if(dynamicObject.cars != null)
{
    foreach(var car in dynamicObject.cars)
    {
        Car currentCar = new Car();
        If(car.name != null) currentCar.Name= car.name; 
        If(car.size!= null) currentCar.Size= car.size;
        If(car.color!= null) currentCar.Color= car.color;
        myCarList.Add(currentCar);
    }
}

另外我认为这可以通过以下方式用更少的代码来完成:

JObject obj = JsonConvert.DeserializeObject(jsonString);
foreach(var car in obj["cars"])
{
    myCarList.Add(JsonConvert.DeserializeObject(car.toString());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多