我正在尝试反序列化从API返回的一些JSON,以便我可以遍历一个县名数组并将信息添加到C#中的数据表中。但是,当我尝试反序列化时,我在第一个障碍时收到以下错误:
错误:System.MissingMethodException:没有为' DPDJSONLibrary.DPD_JSON + LOCR_Data []'的类型定义无参数构造函数。
API的提供者提供了JSON响应的示例,如下所示:
{
"error": null,
"data":[{
"country": [{
"countryCode":"GB",
"countryName":"United Kingdom",
"internalCode":"UK",
"isEUCountry":false,
"isLiabilityAllowed":false,
"isoCode":"826",
"isPostcodeRequired":false,
"liabilityMax":15000
}]
}]
}
我从API中获取的JSON数据示例是:
{
"data": {
"country":[
{
"countryCode":"PM",
"countryName":"St Pierre & Miquilon",
"isoCode":"666",
"isEUCountry":false,
"isLiabilityAllowed":true,
"liabilityMax":15000,
"isPostcodeRequired":true
},
{
"countryCode":"SR",
"countryName":"Suriname",
"isoCode":"740",
"isEUCountry":false,
"isLiabilityAllowed":true,
"liabilityMax":15000,
"isPostcodeRequired":true
},
{
"countryCode":"SZ",
"countryName":"Swaziland",
"isoCode":"748",
"isEUCountry":false,
"isLiabilityAllowed":true,
"liabilityMax":15000,
"isPostcodeRequired":true
}
]
}
}
我试图制作一些类来将JSON放入如下:
/// <summary>
/// List Of Countries Response object.
/// </summary>
public class LOCR
{
public LOCR_Error error { get; set; }
public LOCR_Data[] data { get; set; }
}
public class LOCR_Error
{
public string errorAction { get; set; }
public string errorCode { get; set; }
public string errorMessage { get; set; }
public string errorObj { get; set; }
public string errorType { get; set; }
}
public class LOCR_Data
{
public LOCR_Data_Country[] country { get; set; }
}
public class LOCR_Data_Country
{
public string countryCode { get; set; }
public string countryName { get; set; }
public string internalCode { get; set; }
public bool isEUCountry { get; set; }
public bool isLiabilityAllowed { get; set; }
public string isoCode { get; set; }
public bool isPostcodeRequired { get; set; }
public int liabilityMax { get; set; }
}
当我将JSON作为字符串返回时,我正在尝试使用Newtonsoft(插件?)将其放入我的类中:
JavaScriptSerializer ser = new JavaScriptSerializer();
DPD_JSON.LOCR DPDCountries = new DPD_JSON.LOCR();
DPDCountries = ser.Deserialize<DPD_JSON.LOCR>(data);
上面的最后一行是生成错误。我怀疑我写错了我的课程,我试图将JSON反序列化 - 有人能看到我出错的地方吗?
答案 0 :(得分:0)
Deserialize
会返回一个列表,而不是一个数组,因此LOCR_Data_Country
应该是List
类型,而不是数组:
public class LOCR_Data
{
public List<LOCR_Data_Country> country { get; set; }
}
答案 1 :(得分:0)
您已经显示的两个示例JSON字符串之间存在巨大差异。主要是第一个是数组:"data":[ ... ]
,第二个是对象"data:{ ... }
。这两个是不可互换的,所以你必须坚持其中任何一个。如果您从API返回的内容是对象,则应将模型重写为:
public class LOCR
{
public LOCR_Error error { get; set; }
// object here since "data": { ... }
public LOCR_Data data { get; set; }
}
当您使用JSON进一步移动时,您可以看到LOCR_Data.country
实际上是"country": [ ... ]
两种情况下的数组,因此您可以坚持使用LOCR_Data
类的当前实现。< / p>
答案 2 :(得分:0)
尝试使用:
dynamic data = Json.Decode(json);
请参阅此Using JsonConvert.DeserializeObject to deserialize Json
的答案OR
{{1}}
您可以参考此Deserialize JSON into C# dynamic object?获取进一步的帮助