如何从sql父子关系表形成嵌套的json

时间:2015-03-20 11:13:43

标签: c# sql-server json

我的sql程序给出了以下输出。 enter image description here

如果你看表​​id 1,2,5和6有孩子0r 2,3,6,7有父母。相应的父ID在parentid列中给出。

现在在C#.Net中我必须将此表转换为嵌套的json。这是父元素内的子元素,如下所示。

enter image description here

怎么做。请帮助谢谢

2 个答案:

答案 0 :(得分:2)

您可以创建一个对象,该对象具有与表中属性相对应的属性,然后将其序列化为JSON。

如果我不得不接受这些课程的内容,可能就像:

public class Person
{
    public int Id {get; set;}
    public string Name {get; set;}
    public string Value {get; set;}
    public PersonAttributes attributes {get; set;}
    public List<Person> Children {get; set;}
}

public class PersonAttributes
{
    public bool HasChild {get; set;}
    public bool HasParent {get; set;}
    public int ParentId {get; set;}
}

然后,您可以对构造函数进行编码,以便根据需要对DataTable进行排序和分配。

对于序列化,我建议JSON.net,我一直使用它,它从来没有让我失望。

答案 1 :(得分:2)

这应该有助于您至少开始,但您需要SQL Server 2012.您没有指定您正在使用的版本。

declare @t table (id int, name varchar(50), value varchar(50), HasParent varchar(3), ParentID int, HasChild varchar(3))
insert into @t
exec dbo.YourStoredProc

select
      id
    , name
    , value
    , HasChild 'attributes.HasChild'
    , HasParent 'attributes.HasParent'
    , ParentID  'attributes.ParentId'
    , child.id  'children.id'
    , child.name 'children.name'
    , child.value 'children.value'
    , child.haschild 'children.attributes.haschild'
    , child.hasparent 'children.attributes.hasparent'
    , child.parentid 'children.attributes.parentid'
    , gchild.id 'children.children.id'
    , gchild.name 'children.children.name'
    , gchild.value 'children.children.value'
    , gchild.haschild 'children.children.attributes.haschild'
    , gchild.hasparent 'children.children.attributes.hasparent'
    , gchild.parentid 'children.children.attributes.parentid'
from @t t
join @t child on child.ParentID = t.id
join @t gchild on gchild.ParentID = child.id
for json auto