2016-12-01 40 views
-1

2 JSON類我有一個JSON類,如下所示:合併帶着孩子

[ 
{ 
    "url": "", 
    "expanded": false, 
    "label": "Reports", 
    "last_modified": "2014-09-28T11:19:49.000Z", 
    "type": 2, 
    "children": [ 
     { 
      "url": "", 
      "expanded": false, 
      "label": "2014", 
      "last_modified": "2014-09-28T11:19:49.000Z", 
      "type": 2 
      }}] 

我如何創建數據表只是一個JSON類,如下所示? 我想在AngularJs.thnx

"children": [ 
        { 
         "url": "foo.pdf", 
         "expanded": false, 
         "label": "E14288-Passive-40085-2014_09_26.pdf", 
         "last_modified": "2014-09-28T11:19:49.000Z", 
         "type": 1, 
         "size": 60929 
        } 
       ] 
+0

請詳細說明了。你想在哪裏創建它?它是模型或動態視圖數據中的類還是...? – Emad

+0

目前還不清楚你在問什麼。你有「小孩」列表,想知道如何序列化它?你通過合併意味着什麼? – HebeleHododo

+0

我很抱歉,但仍不清楚。你想提取原始類的'孩子'屬性嗎?或者你想創建一個包含兩個元素的'children'列表?你有任何反序列化代碼?如果我們不明白你想要完成什麼,我們就無法幫助你。 – HebeleHododo

回答

1

我如何與數據表中僅創建JSON類按如下方式使用這個孩子的TreeGrid?

所以首先你需要Deserialize你的json到Object。之後,您需要使用反射將此對象映射到DataTable

我強烈建議你到google搜索這3發子彈,如果你不知道從什麼答案:

  • 如何反序列化JSON到對象
  • 什麼是反思,如何使用反射
  • 如何從頭開始創建DataTable。

完整的示例:dotNetFiddle

public static void Main(string[] args) 
    { 
     string json = @" { 
     ""children"": [ 
       { 
      ""url"": ""foo.pdf"", 
        ""expanded"": false, 
        ""label"": ""E14288-Passive-40085-2014_09_26.pdf"", 
        ""last_modified"": ""2014-09-28T11:19:49.000Z"", 
        ""type"": 1, 
        ""size"": 60929 
       } 
      ] 
     }"; 

     var result = JsonConvert.DeserializeObject<ChildrenRootObject>(json); 
     DataTable tbl = DataTableFromObject(result.children); 
    } 

    public static DataTable DataTableFromObject<T>(IList<T> list) 
    { 
     DataTable tbl = new DataTable(); 
     tbl.TableName = typeof(T).Name; 

     var propertyInfos = typeof(T).GetProperties(); 
     List<string> columnNames = new List<string>(); 

     foreach (PropertyInfo propertyInfo in propertyInfos) 
     { 
      tbl.Columns.Add(propertyInfo.Name, propertyInfo.PropertyType); 
      columnNames.Add(propertyInfo.Name); 
     } 

     foreach(var item in list) 
     { 
      DataRow row = tbl.NewRow(); 
      foreach (var name in columnNames) 
      { 
       row[name] = item.GetType().GetProperty(name).GetValue(item, null); 
      } 

      tbl.Rows.Add(row); 
     } 

     return tbl; 
    } 

    public class Child 
    { 
     public string url { get; set; } 
     public bool expanded { get; set; } 
     public string label { get; set; } 
     public DateTime last_modified { get; set; } 
     public int type { get; set; } 
     public int size { get; set; } 
    } 

    public class ChildrenRootObject 
    { 
     public List<Child> children { get; set; } 
    }