C# 反序列化不同数据的问题
我使用Json.net JsonConvert从rest API反序列化一些Json,方式如下:C# 反序列化不同数据的问题,c#,json.net,C#,Json.net,我使用Json.net JsonConvert从rest API反序列化一些Json,方式如下: WebRequest request = WebRequest.Create(url); WebResponse ws = request.GetResponse(); using (StreamReader sr = new StreamReader(ws.GetResponseStream())) { jsonString = sr.R
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);
我已经将问题缩小到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; }
}
公共类根对象
{
公共列表收入_列表{get;set;}
}
公共阶层收入
{
公共货币{get;set;}
}
公营货币
{
公共字符串GBP{get;set;}
公共字符串USD{get;set;}
公共字符串EUR{get;set;}
}
考虑到无效的JSON的货币值都是零,简单地捕获JSON反序列化异常并返回一个新的收入
对象,其货币
对象初始化为全零,可能要容易得多。你能发布根对象
的代码吗?@nick_w code post,currency类显然是为大多数API请求返回的数据设计的。第二个JSON示例似乎无效(可能解释了您得到的错误)。您希望将其转换为什么类型的输出?另外,Income
对象不应该是JSON中的数组而不是对象文字吗?@nick\w不正确的JSON似乎总是返回0,所以我想将其转换为正确的格式,值为零,或者如果不可行,即使忽略它并使用空值也会更好。那么转换数据的目标是什么呢?如果无效JSON的货币值仅为零,您能否捕获解析异常并返回一个新的Income
,并将其currency
初始化为包含零?
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; }
}