我正在使用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; }
}
答案 0 :(得分:1)
鉴于无效的JSON无论如何都有零的货币值,简单地捕获JSON反序列化异常并返回一个新的Income
对象,其Currency
对象初始化为全部可能要容易得多零。