拼合嵌套的Dictionary <string,object>

Die*_*ros 1 c# linq .net-3.5

我正在使用以下内容反序列化一些嵌套的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。

L.B*_*L.B 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)