2016-08-25 13 views
2

私はC# 4.5を使用しています。私はWindowsアプリケーションを作成しました。サードパーティのAPIデータソースを使用してデータグリッドをバインドする

プロジェクトの要件に応じて、jsonの配列を返すサードパーティのAPI応答をdatagridにバインドする必要があります。

私はとRestClientを使用して取得したデータは、私はGridViewののデータソースとしてオブジェクトのこの配列を結合することができる任意の技術があります

IRestResponse response = client.Execute(request);     
dynamic result = new JDynamic(response.Content); 

としてJDynamicパッケージを使用してオブジェクトにそれらを変換していましたか?

また、特定の列のみを表示する必要がある場合はどうすればよいですか?

編集:


何かのようにJSON応答は次のとおりです。私は以下のようにそれのために新しいクラスを作成している

[ 
    { 
     "id": 7, 
     "username": "[email protected]", 
     "first_name": "Carlos", 
     "middle_name": "", 
     "last_name": "Alaiz", 
     "gender": "male", 
     "addr1": "", 
     "addr2": "", 
     "state": "", 
     "city": "", 
     "country": "", 
     "post_code": "", 
     "email_id": "[email protected]", 
     "email_id_alt": "", 
     "phone1": "1800777333", 
     "phone2": "", 
     "photo": "2015-09-09-17-14-29-2015-01-22-06-26-15-400-don-passport-lighting-test 044-3-100pc_pp-ps.jpg", 
     "populations": [{ 
      "id": 8, 
      "population_name": "Pop 8" 
     }] 
    }, 
    { 
     "id": 8, 
     "username": "[email protected]", 
     "first_name": "Pedro", 
     "middle_name": "", 
     "last_name": "Montero", 
     "gender": "male", 
     "addr1": "", 
     "addr2": "", 
     "state": "", 
     "city": "", 
     "country": "", 
     "post_code": "", 
     "email_id": "[email protected]", 
     "email_id_alt": "", 
     "phone1": "1800999222", 
     "phone2": "", 
     "photo": "2015-09-09-17-13-40-2014-10-27-06-59-56-bilde.jpeg", 
     "populations": [{ 
      "id": 8, 
      "population_name": "Pop 8" 
     }] 
    }, 
    { 
     "id": 9, 
     "username": "[email protected]", 
     "first_name": "Mario", 
     "middle_name": "", 
     "last_name": "Sanz", 
     "gender": "male", 
     "addr1": "", 
     "addr2": "", 
     "state": "", 
     "city": "", 
     "country": "", 
     "post_code": "", 
     "email_id": "[email protected]", 
     "email_id_alt": "", 
     "phone1": "1800288299", 
     "phone2": "", 
     "photo": "2015-09-09-17-13-17-2014-10-27-06-28-30-Jim-Smith.jpg", 
     "populations": [{ 
      "id": 7, 
      "population_name": "Pop 7" 
     }] 
    }, 
    { 
     "id": 10, 
     "username": "[email protected]", 
     "first_name": "Parikshit", 
     "middle_name": "", 
     "last_name": "Thakur", 
     "gender": "male", 
     "addr1": "", 
     "addr2": "", 
     "state": "", 
     "city": "", 
     "country": "", 
     "post_code": "", 
     "email_id": "[email protected]", 
     "email_id_alt": "", 
     "phone1": "1800299200", 
     "phone2": "", 
     "photo": "2015-09-10-11-52-05-parikshit.jpg", 
     "populations": [{ 
      "id": 8, 
      "population_name": "Pop 8" 
     }] 
    }, 
    { 
     "id": 11, 
     "username": "[email protected]", 
     "first_name": "Nidhi ", 
     "middle_name": "", 
     "last_name": "Patel", 
     "gender": "female", 
     "addr1": "", 
     "addr2": "", 
     "state": "", 
     "city": "", 
     "country": "", 
     "post_code": "", 
     "email_id": "[email protected]", 
     "email_id_alt": "", 
     "phone1": "1800200300", 
     "phone2": "", 
     "photo": "female.jpg", 
     "populations": [] 
    } 
] 

namespace DemoAutoLogin 
{ 
    public class patient 
    { 
     public int id { get; set; } 
     public string username { get; set; } 
     public string first_name { get; set; } 
     public string middle_name { get; set; } 
     public string last_name { get; set; } 
     public string gender { get; set; } 
     public string addr1 { get; set; } 
     public string addr2 { get; set; } 
     public string state { get; set; } 
     public string city { get; set; } 
     public string country { get; set; } 
     public string post_code { get; set; } 
     public string email_id { get; set; } 
     public string email_id_alt { get; set; } 
     public string phone1 { get; set; } 
     public string phone2 { get; set; } 
     public string photo { get; set; } 
     public List<Population> populations { get; set; } 
    } 

    public class Population 
    { 
     public int id { get; set; } 
     public string population_name { get; set; } 
    } 
} 

今、何グリッドビューでJSONレコードを表示することはできますか?

+1

は、カスタムPOCOを作成し、あなたにこのデータをデシリアライズすることができます(あなたが無視したい列_without_) このToDataTable拡張子を追加します。それをあなたのPOCOの 'IUMUMERABLE'または' ILIST'にデシリアライズしてください。これをDataGridにバインドすることができます。私は[this tool](http://jsonutils.com/)を使って私の手助けをしています。 –

+0

@HanletEscaño私はサンプルコードをお願いできますか? – Dev

答えて

2

次に、結果からIEnumerable<patient>に単純にデシリアライズすることができます。これにはJson.NETを使用してください。 IEnumerable<patient>をグリッドにバインドすることができます。

public void BindMyData() 
{ 
    IEnumerable<patient> patients = JsonConvert.DeserializeObject<IEnumerable<patient>>(resultAsJson); 
    datagrid.DataSource = patients; 
} 

このように動作するはずです。..

あなたはPOCO持っていない場合:あなたはビングリッドにIEnumerable<Dictionary<string, object>>は、あなたが多分結合することができることができない場合

public void BindMyData() 
{ 
    IEnumerable<Dictionary<string, object>> patients = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(resultAsString); 
    // if this works, i'm not sure: 
    datagrid.DataSource = patients; 
} 

をデータ表。

public static class Exts 
{ 
    public static DataTable ToDataTable(this IEnumerable<Dictionary<string, object>> list) 
    { 
     DataTable result = new DataTable(); 
     if (!list.Any()) 
      return result; 

     var columnNames = list.SelectMany(dict => dict.Keys).Distinct(); 
     result.Columns.AddRange(columnNames.Select(c => new DataColumn(c)).ToArray()); 
     foreach (var item in list) 
     { 
      var row = result.NewRow(); 
      foreach (var key in item.Keys) 
       row[key] = item[key]; 

      result.Rows.Add(row); 
     } 

     return result; 
    } 

} 

し、それに結合するこの方法:

public void BindMyData() 
{ 
    IEnumerable<Dictionary<string, object>> patients = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(resultAsString); 
    datagrid.DataSource = patients.ToDataTable(); 
} 
+0

エラーlamda式を、デリゲートまたは式ツリータイプにキャストしないで、動的にディスパッチされた操作の引数として使用できません – Dev

+0

どのタイプが 'result'ですか。 'IEnumerable 'にCastableできますか?あなたはそれを前にチェックしてから、それをキャストすることができます。 'IEnumerable listResult =(IEnumerable )result' –

+1

それを理解するのに役立ついくつかのサンプルデータを投稿してください。 – Dev

関連する問題