我正在使用以下内容反序列化一些嵌套的JSON:
string json = @"{
""name"": ""charlie"",
""someID"": 123,
""level1"" : {
""name"": ""charlie 1"",
""someID"": 456
}
}";
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> data = serializer.Deserialize<Dictionary<string, object>>(json);
Run Code Online (Sandbox Code Playgroud)
完成此操作后,每个字典键的值都可以是另一个字典,依此类推,可以有多个层次。
我想做的是将多级数据展平,因此它只是一个平面Array / List,仅包含所有JSON属性名称及其值。这样我最终得到这样的东西:
name, "charlie"
someID, 123
name, charlie 1
someID, 456
Run Code Online (Sandbox Code Playgroud)
我一直在使用SelectMany()之类的方法,但是无法纠缠它来做我想做的事情。
我一直在徘徊这样的事情:
var obj = data.Values.SelectMany<object, Dictionary<string, object>>(x => x);
Run Code Online (Sandbox Code Playgroud)
但是我不能满足编译器的要求。是的,我迷路了。
我正在使用.NET 3.5。
Func<Dictionary<string, object>, IEnumerable<KeyValuePair<string, object>>> flatten = null;
flatten = dict => dict.SelectMany(kv =>
kv.Value is Dictionary<string,object>
? flatten((Dictionary<string,object>)kv.Value)
: new List<KeyValuePair<string,object>>(){ kv}
);
var flatList = flatten(data).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4805 次 |
| 最近记录: |