给出一个看似无效的json (来自谷歌)
https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=de&dt=t&q=Science
的
[[["Wissenschaft","Science",,,2]],,"en"]
我希望获得Wissenschaft和Science的价值
如果用Json.net通过
找出一种非常不优雅的方式string h = "[[[\"Wissenschaft\",\"Science\",,,2]],,\"en\"] ";
var obj = JsonConvert.DeserializeObject<List<dynamic>>(h);
JArray arr1 = obj[0];
var arr2 = arr1.First;
var x = arr2.First.Next;
string s = x.ToString();
是否有一些更好,更简洁的方式?
答案 0 :(得分:1)
这是一个更简洁的版本,也许某人有一个也保留 顶部数组中的其他值
string h = "[[[\"Wissenschaft\",\"Science\",,,2]],,\"en\"]";
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Error = (serializer, err) =>
{
err.ErrorContext.Handled = true;
//ignore all errors
};
var obj = JsonConvert.DeserializeObject<List<List<List<dynamic>>>>(h,settings);
string strWissenschaft = obj[0][0][0];
string strScience = obj[0][0][1];
如您所见,我只关心最嵌套数组中的值,其他值将丢失。
答案 1 :(得分:0)
首先,这不是有效的JSON对象,但是如你所说,Json.NET将通过在空逗号中添加空值来解析它,从而无所事事。
因为这不是有效的对象,它只是一些JSON格式的数组。可能没有更好的方法可以像现在一样将其解析为动态列表。
如果{ }
在开始和结束时有一些键:值格式,您可以根据您可以定义的类将其反序列化为C#对象。