簡體   English   中英

Newtonsoft.Json反序列化問題

[英]Newtonsoft.Json Deserialize issue

嘗試從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次左右,但這一次已經到了。

在您發布的示例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實際上返回產品數組 ,而不是它現在返回的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM