[英]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.