2013-04-03 18 views
5

Mi viene restituita una stringa con oggetti json da un webapi esterno. Ho un codice che ottiene gli oggetti in un elenco ExpandoObject, ma deve esserci un'altra soluzione senza utilizzare l'oggetto dinamico.Converti stringa JSON in lista di oggetti

Ecco il codice:

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

Ecco un esempio della stringa 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) 

risposta

2

È possibile utilizzare uno dei numerosi parser JSON C# per fare questo. Personalmente preferisco lo JSON.Net (che puoi installare tramite NuGet). Può deserializzare sia per gli oggetti dinamici che per le tue classi tipizzate staticamente.

+0

Non voglio usare librerie esterne, se è possibile – Aleks