2013-04-03 16 views
5

外部のwebapiからjsonオブジェクトを含む文字列を取得しています。 ExpandoObjectリストにオブジェクトを取得するコードがありますが、動的オブジェクトを使用せずに別のソリューションが必要です。ここでJsonの文字列をオブジェクトのリストに変換する

はコードです:ここでは

System.Net.HttpWebRequest request = 

(System.Net.HttpWebRequest)System.Net.WebRequest.Create("https://example.com/api/users.json"); 
request.Credentials = System.Net.CredentialCache.DefaultCredentials; 
request.Headers["Authorization"] = "API key="+somekey; 
// Ignore Certificate validation failures (aka untrusted certificate + certificate chains) 
System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); 

System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse(); 
Stream resStream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(resStream); 
//response from the api 
string responseFromServer = reader.ReadToEnd(); 
//serialize the data 
var jss = new System.Web.Script.Serialization.JavaScriptSerializer(); 
System.Collections.IList users = (System.Collections.IList)((IDictionary<string, object>)((IDictionary<string, object>)jss.DeserializeObject(responseFromServer))["data"])["users"]; 

List<System.Dynamic.ExpandoObject> api_users = new List<System.Dynamic.ExpandoObject>(); 
//putting the expandable objects in list 
foreach (var u in users) 
{ 
    var user = ((Dictionary<string, object>)((IDictionary<string, object>)u)["User"]); 
    dynamic data = new System.Dynamic.ExpandoObject(); 
    //putting the user attributes into dynamic object 
    foreach (var prop in user) 
    { 
     ((IDictionary<String, Object>)data).Add(prop.Key, prop.Value); 
    } 
    api_users.Add(data); 
} 

は、JSON文字列のサンプルです:

"data": { 
    "users": [ 
     { 
     "User": { 
      "user_id": "6741", 
      "email": "[email protected]", 
      "first_name": "Mark", 
      "last_name": "Plas", 
      "street_address": "", 
      "post_code": "", 
      "city": "" 
     }, 
     "CreatedBy": { 
      "id": null, 
      "name": null 
     }, 
     "ModifiedBy": { 
      "id": null, 
      "name": null 
     } 
     },...(can have more users here) 

答えて

2

あなたがこれを行うには、多くのC#のJSONパーサーのいずれかを使用することができます。私は個人的にはJSON.Net(NuGet経由でインストールできます)を好んでいます。動的オブジェクトと静的型クラスの両方に逆シリアル化できます。

+0

外部ライブラリを使用したくない場合は可能です – Aleks

関連する問題