使用 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 格式。
那么我该如何解决呢?
提前致谢
您可以注释您的产品 class 以告诉 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 字符串是 array/List 类型 Product
.
我正在尝试使用 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 格式。 那么我该如何解决呢?
提前致谢
您可以注释您的产品 class 以告诉 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 字符串是 array/List 类型 Product
.