0

当我尝试反序列化不总是以相同格式出现的 JSON 时,我遇到了问题。我得到的 JSON 是这样的(为清楚起见进行了修剪):

{  
  "header": {  
    "code": "4",  
    "description": "Input Validation Error",  
    "errors": {  
      "code": "100",  
      "description": "externalServiceCode: must match '[A-Za-z0-9_]+'"  
    }  
  },  
  "externalCode": "259716_TRAVELAC"  
},  
{  
  "header": {  
    "code": "4",  
    "description": "Input Validation Error",  
    "errors": [  
      {  
        "code": "100",  
        "description": "Currency not valid"  
      },  
      {  
        "code": "100",  
        "description": "Can not be empty"  
      }  
    ]  
  },  
  "externalCode": "259716_TRA"  
}  

如您所见,“错误”值可能很简单:

 "errors":{"code":"1","description":"description"}  

或者可以作为一个数组出现:

 "errors":[{....},{....}].  

我对 JSON 格式没有任何控制权(我获得它的服务是由另一家公司提供的)。

问题是我找不到将这个 JSON 解析为 C# 的简单方法。我制作了自定义类,如果我将它作为一个简单的对象尝试,如果有多个错误,我会错过数据,如果我认为它是一个数组,如果 JSON 只有一个错误,我什么也得不到(当只有一个时,请注意错误部分中缺少的括号 [])。

有没有办法解决这个问题?我尝试了几种方法,但似乎没有任何效果。

4

2 回答 2

0

使用Json.Net,您可以动态处理您的 json

string json1 = @"{""errors"":{""code"":""1"",""description"":""description""}}";
string json2 = @"{""errors"":[{""code"":""1"",""description"":""description""},{""code"":""2"",""description"":""description""}]}";

var obj = JObject.Parse(json1 or json2);

if (obj["errors"] is JArray)
{
    foreach (var error in obj["errors"])
    {
        Console.WriteLine(error["code"].ToString());
    }
}
else
{
    Console.WriteLine(obj["errors"]["code"].ToString());
}
于 2013-09-03T22:48:00.190 回答
-1

我想你可以看看这个答案。例如,您需要使用 Newtonsoft 反序列化您的 JSON。

如果你没有创建你的类,你可以复制你的 JSON 并点击Paste as JSON

“将 JSON 粘贴为类”是 ASP.NET 和 Web Tools 2012.2 RC 中的一项很酷的功能。此功能将帮助您在 C# 或 VB.NET 中从有效的 JSON 文本生成强类型类。

于 2013-09-03T22:30:42.157 回答