当我尝试反序列化不完全以相同格式存在的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只有一个错误我没有得到任何东西(请注意,当只有一个时,错误部分中缺少括号[]。
有什么方法可以解决这个问题吗?我尝试过几种方法,但似乎没什么用。
答案 0 :(得分: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());
}
答案 1 :(得分:-1)
我想你可以看看this answer。 例如,您需要使用Newtonsoft反序列化您的JSON。
如果您没有创建课程,可以复制JSON并点击Paste as JSON。
'将JSON粘贴为类'是ASP.NET和Web Tools中的一个很酷的功能 2012.2 RC。此功能将帮助您从有效的JSON文本生成C#或VB.NET中的强类型类。