在C#中转换数组数组.. json

时间:2017-02-17 12:27:04

标签: c# arrays json

给出一个看似无效的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();

是否有一些更好,更简洁的方式?

2 个答案:

答案 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#对象。