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)
Non voglio usare librerie esterne, se è possibile – Aleks