我正在使用Json.net JsonConvert从其余的API反序列化一些Json,方式如下:
WebRequest request = WebRequest.Create(url);
WebResponse ws = request.GetResponse();
using (StreamReader sr = new StreamReader(ws.GetResponseStream()))
{
jsonString = sr.ReadToEnd();
}
RootObject root = JsonConvert.DeserializeObject<RootObject>(jsonString);
这非常有效,预计在尝试获取特定的数据集时,当重新初始化时会产生以下错误:
Error reading string. Unexpected token: StartObject. Path
我已经将问题缩小到API以不正确的格式返回某些条目的数据。所以大多数返回的数据看起来是这样的:
Income: {
currency: {
GBP: "48",
USD: "32",
EUR: "40"
}
},
然而,在某些情况下,它正在返回:
income: {
currency: {
GBP: {
GBP: "0",
USD: "0",
EUR: "0"
},
USD: {
GBP: "0",
USD: "0",
EUR: "0"
},
EUR: {
GBP: "0",
USD: "0",
EUR: "0"
}
}
在短期内,我无法修复API,所以我需要以某种方式处理它,但我对使用Json.net相对较新,所以我不确定最好的方法。任何建议都将不胜感激。
我试图将其分解为一个非常简单的类结构:
public class RootObject
{
public List<Income> Income_list { get; set; }
}
public class Income
{
public Currency currency { get; set; }
}
public class Currency
{
public string GBP { get; set; }
public string USD { get; set; }
public string EUR { get; set; }
}
假设无效的JSON的货币值为零,那么简单地捕获JSON反序列化异常并返回一个新的Income
对象及其初始化为全零的Currency
对象可能会容易得多。