2015-02-11 3 views
4

Мне нужно проанализировать некоторые данные JSON ниже, которые вложены в datatable. поле «атрибуты» для каждой из трех групп содержит внутренние данные для заголовка, значения и приоритета.Анализ вложенных данных JSON в DataTable

[{ 
"Title": "OVERVIEW", 
"Priority": 1, 
"attributes": [{ 
    "Title": "Type", 
    "Value": "MacBook Pro", 
    "Priority": 1 
    }, 
    { 
     "Title": "Operating system", 
     "Value": "OS X Mountain Lion", 
     "Priority": 2 
    }, 
    { 
     "Title": "Processor", 
     "Value": "Intel Core i5 Processor (2.3 GHz, 3.3 GHz with TurboBoost, 6MB cache)", 
     "Priority": 3 
    }, 
    { 
     "Title": "Storage", 
     "Value": "500 GB HDDM 5400 rpm", 
     "Priority": 4 
    }] 
}, 
{ 
"Title": "SPECIFICATION", 
"Priority": 2, 
"attributes": [{ 
    "Title": "RAM", 
    "Value": "4 GB DDR3", 
    "Priority": 1 
    }] 
}, 
{ 
"Title": "SCREEN", 
"Priority": 3, 
"attributes": [{ 
    "Title": "Screen size", 
    "Value": "13\"", 
    "Priority": 1 
    }] 
}] 

Я понимаю, что мне нужно для десериализации данных JSON первой,

List<User> UserList = JsonConvert.DeserializeObject<List<User>>(jsonString); 

public static DataTable ToDataTable<T>(this IList<T> data) 
{ 
    PropertyDescriptorCollection props = 
    TypeDescriptor.GetProperties(typeof(T)); 
    DataTable table = new DataTable(); 

    for(int i = 0 ; i < props.Count ; i++) 
    { 
     PropertyDescriptor prop = props[i]; 
     table.Columns.Add(prop.Name, prop.PropertyType); 
    } 
    object[] values = new object[props.Count]; 

    foreach (T item in data) 
    { 
     for (int i = 0; i < values.Length; i++) 
     { 
      values[i] = props[i].GetValue(item); 
     } 
     table.Rows.Add(values); 
    } 
    return table;   
} 

, но не знает, куда идти оттуда, как выше всего учитывает данные JSON счета nrmal. Любая помощь будет принята с благодарностью.

ответ

2

Используйте эти классы для десериализации данных

  public class TitleDesc 
    { 
     public string Title { get; set; } 
     public int Priority { get; set; } 
     public Attribute[] attributes { get; set; } 
    } 

    public class Attribute 
    { 
     public string Title { get; set; } 
     public string Value { get; set; } 
     public int Priority { get; set; } 
    } 

затем использовать этот код для сериализации

string jsonString = "[{'Title': 'OVERVIEW','Priority': 1,'attributes': [{ 'Title': 'Type', 'Value': 'MacBook Pro', 'Priority': 1 }, {  'Title': 'Operating system',  'Value': 'OS X Mountain Lion',  'Priority': 2 }, {  'Title': 'Processor',  'Value': 'Intel Core i5 Processor (2.3 GHz, 3.3 GHz with TurboBoost, 6MB cache)',  'Priority': 3 }, {  'Title': 'Storage',  'Value': '500 GB HDDM 5400 rpm',  'Priority': 4 }]},{'Title': 'SPECIFICATION','Priority': 2,'attributes': [{ 'Title': 'RAM', 'Value': '4 GB DDR3', 'Priority': 1 }]},{'Title': 'SCREEN','Priority': 3,'attributes': [{ 'Title': 'Screen size', 'Value': '13', 'Priority': 1 }]}]"; 
     var data = JsonConvert.DeserializeObject<TitleDesc[]>(jsonString); 

Надеется, что это помогает.

+0

Да, это прекрасно! не думал, что это будет так прямолинейно, спасибо! – Eoiner

+0

да, пожалуйста. –

Смежные вопросы