尝试从web api反序列化json。这是传入的json:
{"0":{"productname":"France and the French",
"imageurl":"http://img.rakuten.com/PIC/32994457/0/1/250/32994457.jpg",
"producturl":"http://www.theurl.com/rd.aspx?3d",
"price":"19.51",
"currency":"USD",
"saleprice":"",
"storename":"Buy.com (dba Rakuten.com Shopping)"}
}
这是我的数据类:
public class Product
{
[JsonProperty("productname")]
public string productname { get; set; }
[JsonProperty("imageurl")]
public string imageurl { get; set; }
[JsonProperty("producturl")]
public string producturl { get; set; }
[JsonProperty("price")]
public string price { get; set; }
[JsonProperty("currency")]
public string currency { get; set; }
[JsonProperty("saleprice")]
public string saleprice { get; set; }
[JsonProperty("storename")]
public string storename { get; set; }
}
以下是代码:
string json = upcclient.GetProductJSON(upc, accessToken);
Product myproduct = JsonConvert.DeserializeObject<Product>(json);
应该很直接。 json正在填充,但无论我尝试什么 - 产品作为主数据类,产品阵列等中的产品列表,myproduct永远不会填充。
提前感谢您的帮助。这个东西通常不是很难。我已经完成了50次左右,但这一次是在找我。
答案 0 :(得分:1)
在您发布的示例JSON中,Product
是根对象的0
字段中包含的对象,并且根对象似乎没有使用JSON数组语法。不幸的是,如果您希望获得任意数量的结果,那么优雅地映射到C#类是相当难看的。如果您知道自己只获得一个产品,则只需添加一个根类:
public class ProductWrapper
{
[JsonProperty("0")]
public Product Product
{
get;
set;
}
}
并且做:
string json = upcclient.GetProductJSON(upc, accessToken);
Product myproduct = JsonConvert.DeserializeObject<ProductWrapper>(json).Product;
我怀疑这个API可能会返回多个产品,所以这可能不是您正在寻找的。如果这是您可以控制的API,则可能值得请求JSON实际返回数组的产品,而不是它现在返回的对象。