Newtonsoft.Json反序列化问题

时间:2014-03-30 03:47:16

标签: c# json

尝试从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次左右,但这一次是在找我。

1 个答案:

答案 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实际返回数组的产品,而不是它现在返回的对象。