【问题标题】:C# - Deserializing Of Object Result and Map it to List From Web APIC# - 对象结果的反序列化并将其映射到 Web API 列表
【发布时间】:2018-09-18 14:27:55
【问题描述】:

早安,

我正在尝试反序列化我的 api 中的列表,但问题是,api 有一个对象。

我的 API 结果如下所示:

{
    result:[
    {
        "name": "Jessica"
    },
    {
        "name": "May"
    },
    {
        "name": "Joseph"
    }]
}

这是我的反序列化代码,它失败了,因为result 导致我没有从 api 获取列表。

var httpClient = new HttpClient();

var task = await httpClient.GetStringAsync("http://something.com/api/whatever");

return JsonConvert.DeserializeObject<List<Whatever>>(task);

我的Whatever.cs 看起来像这样

public class Whatever {
    public string Name {get;set;}
}

有没有办法像我删除结果以便能够将其反序列化为列表,或者 Newtonsoft.JSON 是否提供了任何选项来修剪 result 并使其成为列表而不是对象?

提前谢谢你

【问题讨论】:

  • 你的 Json 不是一个列表,它是一个具有一个名为“result”的属性的对象,它是一个列表。所以让你的班级代表这一点,你会是金色的
  • 最好的选择是实际创建额外的类,它更清晰,而且周围的错误空间更小。但是,如果您绝对不想要该课程,您可以向 Json.Net 寻求帮助。试试这个:JObject.Parse(task)["result"].ToObject&lt;List&lt;Whatever&gt;&gt;()
  • 是的@maccettura 我知道。这不是一个清单。这就是为什么我在反序列化时遇到错误,因为result
  • @jsonGPPD 好的,按照我说的去做,你很好。
  • 不,抱歉,我不会那样做。正确的方法仍然是创建该类,因此我不会发布详细说明如何以 hackish 方式进行操作的答案。

标签: c# asp.net-web-api json.net httpclient


【解决方案1】:

你的班级应该是这样的。

public class Result
{
    public string name { get; set; }
}

public class RootObject
{
    public List<Result> result { get; set; }
}

你可以序列化这个json:

{
    result: [{
        'name': 'Jessica'
    },
    {
        'name': 'May'
    },
    {
        'name': 'Joseph'
    }]
}

像这样:

var res = JsonConvert.DeserializeObject<RootObject>(jsonString);

对于创建类,您可以使用json2csharp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多