在Windows 8 Store App中使用JSON.NET反序列化JSON

时间:2013-02-28 20:46:18

标签: json microsoft-metro json.net

我正在尝试将以下JSON反序列化为Win 8应用程序中的对象:

{
"success":true,
"pharmacies":[
{
"name":"Test Pharmacy",
"phone":null,
"description":"sample description",
"pharmacyid":"1234567",
"pic":"/1341864197.png",
"address":"211 Warren St., #205",
"city":"Newark",
"state":"NJ",
"zipcode":"07103",
"delivery":true,
"dob_check":false,
"name_check":false,
"can_pickup":true,
"barcode_template":"9999999XX"
}
]
}

这是我正在使用的模型:

public class PharmacyList
{
    public List<Pharmacy> pharmacies { get; set; }
}
public class Pharmacy
{
    public string pharmacyid { get; set; }
    public string name { get; set; }
    public string phone { get; set; }


}

这是我用来反序列化的代码

json = await results.Content.ReadAsStringAsync();
List<PharmacyList> p = JsonConvert.DeserializeObject<List<PharmacyList>>(json);

我遇到以下异常:

:无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [PharmacyHC.Models.PharmacyList]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。

我是否尝试反序列化为错误的类型,还是应该格式化JSON,因为它以不同的方式从API返回?

1 个答案:

答案 0 :(得分:0)

我刚刚意识到我犯了一个愚蠢的错误。 p应该已声明为PharmacyList类型而不是列表对象,因为PharmacyList的类声明已包含List对象。

List<PharmacyList> p = JsonConvert.DeserializeObject<List<PharmacyList>>(json);

应该是

PharmacyList p = JsonConvert.DeserializeObject<PharmacyList>(json);