2013-04-03 12 views
5

Ich bin eine Zeichenkette mit JSON-Objekten von einem externen WebAPI bekommen. Ich habe einen Code, der die Objekte in eine ExpandoObject-Liste bringt, aber es muss eine andere Lösung geben, ohne dynamisches Objekt zu verwenden. HierConvert JSON-String zur Liste der Objekte

ist der Code:

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); 
} 

Hier ist ein Beispiel der json string:

"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) 

Antwort

2

Sie eines der vielen C# JSON-Parser verwenden können, dies zu tun. Ich persönlich bevorzuge JSON.Net (die Sie über NuGet installieren können). Es kann sowohl für dynamische Objekte als auch für Ihre eigenen statisch typisierten Klassen deserialisiert werden.

+0

Ich möchte keine externen Bibliotheken verwenden, wenn das möglich ist – Aleks