将Json字符串转换为对象列表
本文关键字:对象 列表 转换 Json 字符串 | 更新日期: 2023-09-27 18:07:22
我从外部webapi获得json对象字符串。我有一个代码,得到对象到ExpandoObject列表,但必须有另一个解决方案,不使用动态对象。
代码如下:
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": "mail@mail.com",
"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)
您可以使用众多c# JSON解析器之一来完成此操作。我个人更喜欢JSON。Net(你可以通过NuGet安装)。它既可以反序列化为动态对象,也可以反序列化为您自己的静态类型类。