2016-07-21 6 views
1

I次のJson文字列をDataTableに変換する必要があります。私は私が今まで持って何DataTableにネストされたJson String

train_num 
train_name 
doj 
from_station(name only) 
to_station(name only) 

を表示する必要がDataTableの

{ 
    "pnr":"1234567890", 
    "train_num":"12311", 
    "train_name":"HWH DLIKLK MAI", 
    "doj":"23-12-2013", 
    "from_station": 
    { 
     "code":"DLI", 
     "name":"Delhi" 
    }, 
    "to_station": 
    { 
     "code":"KLK", 
     "name":"Kalka" 
    } 
} 

public class Train 
{ 
public string train_num { get; set; } 
public string train_name { get; set; } 
public string doj { get; set; } 
public from_station from_station { get; set; } 
public to_station to_station { get; set; } 
} 

public class from_station 
{ 
public string code { get; set; } 
public string name { get; set; } 
} 
public class to_station 
{ 
public string code { get; set; } 
public string name { get; set; } 
} 

public static DataTable ToDataTable(Train data) 
{ 
    PropertyDescriptorCollection props = 
    TypeDescriptor.GetProperties(typeof(Train)); 
    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]; 

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

var data = JsonConvert.DeserializeObject<Train>(JsonString); 
    dt = ToDataTable(data); 
    ui_grdVw_EmployeeDetail1.DataSource = dt; 
    ui_grdVw_EmployeeDetail1.DataBind(); 

である私は、あなたは、データテーブル

train_num 
train_name 
doj 
+0

はなぜすべてのデータテーブルに変換する気?列車オブジェクトを直接縛ることができます。例えば列車データ=(トレイン)JsonConvert.DeserializeObject (JsonString); ui_grdVw_EmployeeDetail1.DataSource = data; – Delosdos

答えて

3

に3つの列のみを取得していますあなたのDataTable変換を調整する必要がありますメソッドをGenericにする。それからあなたが望むようにデータの形を渡してください。

public static DataTable ToDataTable<T>(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; 
} 

注:以下のメソッドは、データテーブルに任意のリストを変換するために使用することができます。

使用法:

var data = JsonConvert.DeserializeObject<Train>(JsonString); 


var shapedData = Enumerable.Range(0, 1).Select(x => 
        new 
        { 
         train_num = data.train_num, 
         train_name = data.train_name, 
         doj = data.doj, 
         from_station = data.from_station.name, 
         to_station = data.to_station.name 
        }).ToList(); 

DataTable dt = ToDataTable(shapedData); 
+0

それは働いた。ありがとうたくさん – Soniya

+0

それは別の方法の場合は何ですか?ネストされたJSONにデータテーブルをどのようにフォーマットする必要がありますか? –

関連する問題