【发布时间】:2019-02-07 05:31:45
【问题描述】:
我有一个动态 JSON 文档,但为了这个问题,假设它类似于以下内容:
{
"name": "Jungle Gym",
"age": 25,
"favorite_color": "#ffa500",
"gender": "male",
"location": {
"city": "Seattle",
"state": "WA",
"citystate": "Seattle, WA"
},
"pets": [
{
"type": "dog",
"name": "Foo",
"food": [
"chicken",
"beef",
"fish"
]
},
{
"type": "cat",
"name": "Bar"
}
]
}
如何获取文档中所有属性名称的列表?我可以获得顶级属性名称(“name”、“age”、“favorite_color”、“gender”、“location”、“pets”),但我需要将所有属性名称归结为“location.state”或“ pets.food”,如果属性/对象存在,甚至更深。 我开始使用以下内容:
var model = JsonConvert.DeserializeObject<JObject>(json);
foreach (JProperty property in model.Properties())
{
if (property.Value.Type == JTokenType.Object)
{
foreach (var tmp in property.Children())
{
Console.WriteLine(tmp.SelectToken().);
}
}
}
但似乎无法导航到超出顶层的对象以获取下一级属性(例如位置属性)。理想情况下,我希望派生属性名称列表包含属性的完整路径,例如location.city、location.state 等,而不仅仅是属性名称,例如city, state.
如何获取 JSON 文档中所有可能具有不同嵌套级别的属性的列表?
【问题讨论】:
-
可能是这样的? How can I generate all possible LINQ strings of a json object for Json.net?。您可能需要过滤掉其值本身不是容器的属性。