我目前正在处理图形数据库中的JSON数据,该数据库的键本质上是动态的
"A": {
"key": {
"id": "A",
},
"value": {
"B": {
"key": {
"id": "B",
},
"value": {
"D": {
"key": {
"id": "D",
},
"value": {},
"C":{
"key": {
"id": "C",
},
"value": {}
}
其中key存储节点信息,值存储子信息。
这里A是根节点,而B和C是其子节点。类似地,对于B,D是子节点。有什么办法可以为每个父节点获取其子节点的ID,例如对于A(我知道),我想要其子节点的ID,即B和C。
先谢谢您。
答案 0 :(得分:1)
首先,您在问题中使用的JSON无效。缺少括号和多余的逗号。如果按照您的描述,我认为应该是这样的:
{
"A": {
"key": {
"id": "A"
},
"value": {
"B": {
"key": {
"id": "B"
},
"value": {
"D": {
"key": {
"id": "D"
},
"value": {}
}
}
},
"C": {
"key": {
"id": "C"
},
"value": {}
}
}
}
}
您可以使用以下类对该结构进行建模:
class Node
{
public Key Key { get; set; }
public Dictionary<string, Node> Value { get; set; }
}
class Key
{
public string Id { get; set; }
}
然后,像这样反序列化JSON:
var result = JsonConvert.DeserializeObject<Dictionary<string, Node>>(json);
要获取给定节点的子ID列表,可以向Node
类添加一个简短的辅助方法:
public List<string> GetChildIds()
{
return Value.Select(kvp => kvp.Value.Key.Id).ToList();
}
然后您可以像这样使用它:
Node a = result["A"];
List<string> ids = a.GetChildIds();
Console.WriteLine(string.Join(", ", ids));
输出:
B, C