ASP.Net:DataTable使用Hierarchy转换为JSON

时间:2014-06-25 05:10:37

标签: c# jquery asp.net json datatable

嗨我在将dataTable转换为JSON格式时出现问题,但我无法获得我想要的输出。

以下是数据表的示例

 Parent        Child
   P1           c1
   P1           c2
   P1           c3
   P2           c4

我需要的输出是:

 [{
    Parent:P1,
    Child:[
            {c1},
            {c2},
            {c3}
           ]
 },
 {
    Parent:P2
    Child:[{c4}]
 }] 

但我总是得到的输出是:

    [{Parent:P1, Child:c1}, {Parent:P1, Child:c2}, {Parent:P1, Child:c3}, {Parent:P2,
           Child:c4}]

1 个答案:

答案 0 :(得分:0)

使用以下代码获取所需结果。

public class ParentNode
{
    public ParentNode()
    {
        this.Child = new List<ChildNode>();
    }
    public string Parent { get; set; }
    public List<ChildNode> Child { get; set; }
}

public class ChildNode
{
    public string Child { get; set; }
}

class DataTableTOJSON
{   
    public static string GetJSON(DataTable dt)
    {            
        List<ParentNode> parent = new List<ParentNode>();            

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

            if (alreadyExists)
                continue;

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

            for (int k = 0; k < foundRows.Count(); k++)
            {
                var objChild = new ChildNode();
                objChild.Child = foundRows[k]["Child"].ToString();
                objParent.Child.Add(objChild);
            }

            objParent.Parent = innerRow.ToString();
            parent.Add(objParent);
        }
        JavaScriptSerializer jsonString = new JavaScriptSerializer();
        return jsonString.Serialize(parent);
    }
}

您将获得以下输出。

[{&#34;父&#34;:&#34; P1&#34;&#34;儿童&#34;:[{&#34;儿童&#34;:&#34; C1&#34 ;},{&#34;儿童&#34;:&#34; C2&#34;},{&#34;儿童&#34;:&#34; C3&#34;}]},{&#34;父&#34;:&#34; P2&#34;&#34;儿童&#34;:[{&#34;儿童&#34;:&#34; C4&#34;}]}]

我希望这会对你有所帮助。