C# 反序列化不同数据的问题

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

我使用Json.net JsonConvert从rest 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);
我已经将问题缩小到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; }
    }