gpt4 book ai didi

c# - 分层 JSON 数据到分层表

转载 作者:太空狗 更新时间:2023-10-29 20:35:53 24 4
gpt4 key购买 nike

我有一个这样的类,对于这种类型,我需要反序列化一个 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 来保持层次结构..

我当然可以使用一些递归函数来处理每个 child 的详细信息,并创建一个动态查询来插入。但我认为这不是最佳解决方案。请提出一个更好的方法来做到这一点

最佳答案

如何通过 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
}

关于c# - 分层 JSON 数据到分层表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com