首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将分层JSON数据转换为分层表

将分层JSON数据转换为分层表
EN

Stack Overflow用户
提问于 2018-03-27 15:57:39
回答 1查看 734关注 0票数 7

我有一个这样的类,对于这个类型,我需要反序列化一个JSON字符串

代码语言:javascript
复制
public class nodes
{
    public int id{get;set;}
    public string name{get;set;}
    public List<nodes> children{get;set;}
}

JSON是这样的

代码语言:javascript
复制
{
  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: []
    }
  ]
}

这就是我反序列化的方法

代码语言:javascript
复制
node d=JsonConvert.DeserializeObject<node>(myJSON); //myJSON is my above JSON string

但要求是我需要将这些数据作为单独的行插入到SQL表中。该表应如下所示

代码语言:javascript
复制
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,用来保持层次结构。

当然,我可以使用一些递归函数来处理每个子对象的详细信息,并创建一个要插入的动态查询。但我不认为这是最好的解决方案。请推荐一种更好的方法

EN

回答 1

Stack Overflow用户

发布于 2018-03-27 16:29:16

如何通过Linq扁平化你的树(它仍然会使用递归),我认为这可能会让它更清晰。然后,您可以循环遍历结果。我的想法是这样的:

首先编写一个扩展方法:

代码语言:javascript
复制
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);
}

然后,您可以展平和循环:

代码语言:javascript
复制
var nodesList = nodes.Flatten(node => node.children).ToList();

foreach(var n in nodeList)
{
    /add to db
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49507341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档