C#将数据表转换为JSON层次结构

C#将数据表转换为JSON层次结构,c#,.net,json,C#,.net,Json,我有以下C#格式的数据表,我想将其转换为json字符串: Nr |Name |Parent 1000000000|data |NULL 1100000000|data1|NULL 1110000000|data2|NULL 1110100000|data3|1110000000 1110200000|data4|1110000000 1120000000|data5|NULL 1120100000|data6|1120000000 如果最后7位为零,则没有父元素,但如果最后7位不

我有以下C#格式的数据表,我想将其转换为json字符串:

Nr        |Name |Parent
1000000000|data |NULL
1100000000|data1|NULL
1110000000|data2|NULL
1110100000|data3|1110000000
1110200000|data4|1110000000
1120000000|data5|NULL
1120100000|data6|1120000000
如果最后7位为零,则没有父元素,但如果最后7位不为零,则覆盖元素为父元素。 JSON输出应该如下所示:

[{
"nr": "1000000000",
"name": "data",
"child": [{
    "nr": null,
    "name": null
}]
}, {
"nr": "1100000000",
"name": "data1",
"child": [{
    "nr": null,
    "name": null
}]
}, {
"nr": "1110000000",
"name": "data2",
"child": [{
    "nr": "1110100000",
    "name": "data3"
}, {
    "nr": "1110200000",
    "name": "data4"
}]
}, {
"nr": "1120000000",
"name": "data5",
"child": [{
    "nr": "1120100000",
    "name": "data6"
}]
}]
如何使用C#?获得所需的结果?我知道这是一个基本的编程,但我很难用它

更新: 我现在做了以下几点

public class Child
{
    public string nr { get; set; }
    public string name { get; set; }
}
public class RootObject
{
    public string nr { get; set; }
    public string name { get; set; }
    public List<Child> child { get; set; }
}

List<Daten> parent = new List<Daten>();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            var innerRow = dt.Rows[i]["Nr"];
            var objParent = new Daten();
            bool alreadyExists = parent.Any(x => x.nr.Contains(innerRow.ToString()));

            if (alreadyExists)
                continue;

            DataRow[] foundRows = dt.Select("[Nr]='" + innerRow + "'");

            for (int k = 0; k < foundRows.Count(); k++)
            {
                var objChild = new Bezirke();
                objChild.nr = foundRows[k]["Parent"].ToString();
                objChild.name = foundRows[k]["Name"].ToString();
                objParent.bezirke.Add(objChild);
            }

            objParent.nr = innerRow.ToString();
            objParent.name = dt.Rows[i]["Name"].ToString();
            parent.Add(objParent);
        }

        string json = JsonConvert.SerializeObject(parent);
        Response.Write(json);

您需要先填充父项集合,然后填充子项:

List<RootObject> data = new List<RootObject>();

for (int i = 0; i < dt.Rows.Count; i++)
{
    if (dt.Rows[i]["Parent"] == null)
        data.Add(new RootObject
        {
           nr= dt.Rows[i]["Nr"],
           name = dt.Rows[i]["Name"],
           child = new List<Child>()
        });
}

for (int i = 0; i < dt.Rows.Count; i++)
{
    if (dt.Rows[i]["Parent"] != null)
    {   
       var parent = data.FirstOrDefault(d => d.nr == dt.Rows[i]["Parent"]);

       if(parent != null)
            parent.child.Add(new Child
            {
                nr = dt.Rows[i]["Nr"],
                name = dt.Rows[i]["Name"]
            });
   }
}
列表数据=新列表();
对于(int i=0;id.nr==dt.Rows[i][“parent”]);
如果(父项!=null)
parent.child.Add(新子级
{
nr=dt.行[i][“nr”],
name=dt.Rows[i][“name”]
});
}
}

您需要先填充父项集合,然后填充子项:

List<RootObject> data = new List<RootObject>();

for (int i = 0; i < dt.Rows.Count; i++)
{
    if (dt.Rows[i]["Parent"] == null)
        data.Add(new RootObject
        {
           nr= dt.Rows[i]["Nr"],
           name = dt.Rows[i]["Name"],
           child = new List<Child>()
        });
}

for (int i = 0; i < dt.Rows.Count; i++)
{
    if (dt.Rows[i]["Parent"] != null)
    {   
       var parent = data.FirstOrDefault(d => d.nr == dt.Rows[i]["Parent"]);

       if(parent != null)
            parent.child.Add(new Child
            {
                nr = dt.Rows[i]["Nr"],
                name = dt.Rows[i]["Name"]
            });
   }
}
列表数据=新列表();
对于(int i=0;id.nr==dt.Rows[i][“parent”]);
如果(父项!=null)
parent.child.Add(新子级
{
nr=dt.行[i][“nr”],
name=dt.Rows[i][“name”]
});
}
}

创建一个POCO对象树并将其JSON序列化,或者手动将其写成字符串。注意:理想情况下,您希望抑制
null
属性以减少JSON负载大小。Newtonsoft Json转换器也可以使用POCO属性上的属性来实现这一点。结果我更新了至少你有了基本的想法,但你的POCO人口似乎是错误的。您没有正确添加父项和子项。您有一个建议,因为我可以做得更好/更好?创建一个POCO对象树并JSON序列化它,或者只是手动将其写为字符串。注意:理想情况下,您希望抑制
null
属性以减少JSON负载大小。Newtonsoft Json转换器也可以使用POCO属性上的属性来实现这一点。结果我更新了至少你有了基本的想法,但你的POCO人口似乎是错误的。您没有正确添加父项和子项。您有一个建议,因为我可以做得更好吗?