分层JSON数据到分层表
我有这样的类和这种类型我需要反序列化一个JSON字符串
public class nodes
{
public int id{get;set;}
public string name{get;set;}
public List<nodes> children{get;set;}
}
而JSON就是这样
{
id: 15,
name: 'user1',
children: [
{
id: 22,
name: 'user2',
children: [
{
id: 34,
name: 'user3',
children: [
{
id: 43,
name: 'user4',
children: []
},
{
id: 54,
name: 'user5',
children: []
}
]
},
{
id: 65,
name: 'user6',
children: []
}
]
},
{
id: 72,
name: 'user7',
children: []
}
]
}
这就是我的反序列化
node d=JsonConvert.DeserializeObject<node>(myJSON); //myJSON is my above JSON string
但需求是我需要将这些数据作为单独的行插入到SQL表中。 表格应如下所示
UniqueID id name ParentID
------------------------------------
1 15 User1 0
2 22 User2 1
3 34 User3 2
4 43 User4 3
5 54 User5 3
6 65 User6 2
7 72 User7 1
--------------------------------------
正如你看到表中有一个系统生成的ID列UniqueID
。 另一列ParentID
保持层次结构..
我当然可以使用一些递归函数来处理每个孩子的细节并创建一个动态查询来插入。 但我不认为它是最好的解决方案。 请建议一个更好的方法来做到这一点
如何通过Linq展开你的树(它仍然会使用递归),我认为它可以使它更清晰。 然后你可以循环结果。 我在想这样的事情:
先写一个扩展方法:
public static IEnumerable<T> Flatten<T>(
this IEnumerable<T> c,
Func<T,IEnumerable<T>> f)
{
return c.SelectMany(n => f(n).Flatten(f)).Concat(c);
}
然后你可以扁平化并循环:
var nodesList = nodes.Flatten(node => node.children).ToList();
foreach(var n in nodeList)
{
/add to db
}
链接地址: http://www.djcxy.com/p/801.html