2016-12-01 2 views
-1

У меня есть класс 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 с DataTable следующим? Я хочу использовать этот ребенок в TreeGrid в 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

Непонятно, что вы просите. У вас есть список «children» и вы хотите знать, как его сериализовать? И что вы подразумеваете под слиянием? – HebeleHododo

+0

Простите, но все еще не ясно. Вы хотите извлечь свойство 'children' исходного класса? Или вы хотите создать «детский» список с двумя элементами? Есть ли у вас код десериализации? Мы не можем вам помочь, если не понимаем, чего вы пытаетесь достичь. – HebeleHododo

ответ

1

Как создать только класс JSON с DataTable следующим?

Итак, сначала вам нужно Deserialize вашего json to Object. После этого вам необходимо сопоставить этот объект с DataTable с использованием отражения.

Я настоятельно советую вам Google поиск это 3 пули, если вы не понимаете, что-то от ответа:

  • Как Deserialize 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; } 
    } 
Смежные вопросы