繁体   English   中英

使用RestSharp麻烦反序列化JSON

[英]Trouble deserialize JSON with RestSharp

我正在尝试使用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格式。 那么我该如何解决呢?

提前致谢

您可以注释您的产品类,以告诉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<Product>其中包含两个正确填充的条目。


后代的原始答案:

我还没有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);

我认为您的反序列化实际上应该是List<Product>而不是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类型的数组/列表时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM