我正在尝试使用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格式。 那么我该如何解决呢?
预先感谢
答案 0 :(得分:0)
您可以注释您的产品类以告诉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>
,其中包含两个正确填充的条目。
后代的原始答案:
我还没有Restrestp的答案(但是),如果可以使用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);
答案 1 :(得分:0)
我认为您的反序列化实际上应该是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
的数组/列表。 / p>