【问题标题】:Trouble deserialize JSON with RestSharp使用 RestSharp 反序列化 JSON 时遇到问题
【发布时间】:2018-06-28 23:07:10
【问题描述】:

我正在尝试使用 RestSharp 反序列化来自 WooCommerce 的 JSON 响应。 我一直在爬这个网站寻找类似的帖子,但没有找到任何解决方案。

我的 JSON(简体)

[
    {
        "id":1,
        "name":"product 1",
    },
    {
        "id":2,
        "name":"product 2",
    }
]

像这样翻译成 C#:

public class ProductResponse
{
    public List<Product> products { get; set; }
}

public class Product
{
    public int id { get; set; }
    public string name { get; set; }
}

这样称呼

var response = client.Execute<ProductResponse>(request);

但它不起作用,因为产品数组没有名称。 如果 JSON 更改为

{
    "products":
    [
        {
            "id":1,
            "name":"product 1",
        },
        {
            "id":2,
            "name":"product 2",
        }
    ]
}

它就像一个魅力。不幸的是,我无法更改 JSON 格式。 那我该如何解决呢?

提前致谢

【问题讨论】:

  • 我在这里测试过。问题是您收到的 JSON 格式不正确。
  • 是的,我忘了删除每个对象中最后一个属性后的逗号 - 删除后它是有效的:)

标签: c# .net json restsharp


【解决方案1】:

您可以注释您的产品类以告诉 RestSharp 哪个属性是哪个:

public class Product
{
    [DeserializeAs(Name = "id")]
    public int id { get; set; }

    [DeserializeAs(Name = "name")]
    public string name { get; set; }
}

然后:

var response = client.Execute<List<Product>>(request);

您现在应该有一个List&lt;Product&gt;,其中包含两个正确填充的条目。


后人的原始答案:

我还没有关于 RestSharp 的答案,但是如果你可以使用 Newtonsoft JSON,你可以很容易地做到这一点。

你可以像这样使用JsonProperty注解:

public class Product
{
    [JsonProperty("id")]
    int id { get; set; }

    [JsonProperty("name")]
    string name { get; set; }
}

然后:

var products = JsonConvert.DeserializeObject<List<Product>>(json);

【讨论】:

  • 当然 - 这是有道理的。我已更改为 var response = client.Execute>(request);并且可以删除 ProductResponse 类。非常感谢!
【解决方案2】:

我认为您的反序列化实际上应该是 List&lt;Product&gt; 而不是 ProductResponse

例如

var response = client.Execute<List<Product>>(request);

Console.WriteLine("id = " + response[0].id)      //  id = 1  
Console.WriteLine("name = " + response[0].name)  //  name = product 1
Console.WriteLine("id = " + response[1].id)    //  id = 2
Console.WriteLine("name = " + response[1].name)  //  name = product 2

所以 JSON 字符串没有任何问题,我认为问题在于您期望 ProductResponse 类型的对象,而您的 JSON 字符串是 Product 类型的数组/列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2011-06-30
    相关资源
    最近更新 更多