如何仅使用动态将 JSON 反序列化为简单的 Dictionary<string,object> 到 datagridview?
How can I deserialize JSON to a simple Dictionary<string,object> to datagridview using only dynamics?
我在网络服务器 JSON 中有一个简单的 key/value 列表,需要将此数据放入没有任何 dll 的 datagridview 中,如 JSON.Net。我发现计数等于三(数组 json),但我无法提取它。示例:
var json = new WebClient().DownloadString("https://server.com/getMsg.aspx");
JavaScriptSerializer serializer = new JavaScriptSerializer();
var dictObj = serializer.Deserialize<Dictionary<string, dynamic>>(json);
List<Person> list = new List<Person>();
for (int i = 0; i < dictObj["result"].Count; i++)
{
Person p = new Person();
p.Id = dictObj["result"].Value[i].id;
p.Name = dictObj["result"].Value[i].name;
p.Age = dictObj["result"].Value[i].age;
list.Add(p);
}
datagridView1.DataSource = list;
下载的json如下:
{"result": [
{"id": "14", "name": "sdfsdfsdf", "age": "40" },
{"id": "13", "name": "vfdgdg", "age": "50" },
{"id": "12", "name": "grgetge","age": "60" } ] }
我会尝试创建一个 class RootObject
来承载您的 Person
集合实例。
然后用serializer.Deserialize<RootObject>
来制作。
public class Person
{
public string id { get; set; }
public string name { get; set; }
public string age { get; set; }
}
public class RootObject
{
public List<Person> result { get; set; }
}
那你可以直接用List<Person>
代替for loop
var dictObj = serializer.Deserialize<RootObject>(json);
datagridView1.DataSource = dictObj.result;
备注
我建议你使用 Json.net third-party 库而不是 JavaScriptSerializer
因为它的性能会比 JavaScriptSerializer
而且使用起来很简单,使用JsonConvert.DeserializeObject<T>()
就可以将json反序列化为object。
var dictObj = JsonConvert.DeserializeObject<RootObject>(Json);
datagridView1.DataSource = dictObj.result;
我在网络服务器 JSON 中有一个简单的 key/value 列表,需要将此数据放入没有任何 dll 的 datagridview 中,如 JSON.Net。我发现计数等于三(数组 json),但我无法提取它。示例:
var json = new WebClient().DownloadString("https://server.com/getMsg.aspx");
JavaScriptSerializer serializer = new JavaScriptSerializer();
var dictObj = serializer.Deserialize<Dictionary<string, dynamic>>(json);
List<Person> list = new List<Person>();
for (int i = 0; i < dictObj["result"].Count; i++)
{
Person p = new Person();
p.Id = dictObj["result"].Value[i].id;
p.Name = dictObj["result"].Value[i].name;
p.Age = dictObj["result"].Value[i].age;
list.Add(p);
}
datagridView1.DataSource = list;
下载的json如下:
{"result": [
{"id": "14", "name": "sdfsdfsdf", "age": "40" },
{"id": "13", "name": "vfdgdg", "age": "50" },
{"id": "12", "name": "grgetge","age": "60" } ] }
我会尝试创建一个 class RootObject
来承载您的 Person
集合实例。
然后用serializer.Deserialize<RootObject>
来制作。
public class Person
{
public string id { get; set; }
public string name { get; set; }
public string age { get; set; }
}
public class RootObject
{
public List<Person> result { get; set; }
}
那你可以直接用List<Person>
代替for loop
var dictObj = serializer.Deserialize<RootObject>(json);
datagridView1.DataSource = dictObj.result;
备注
我建议你使用 Json.net third-party 库而不是 JavaScriptSerializer
因为它的性能会比 JavaScriptSerializer
而且使用起来很简单,使用JsonConvert.DeserializeObject<T>()
就可以将json反序列化为object。
var dictObj = JsonConvert.DeserializeObject<RootObject>(Json);
datagridView1.DataSource = dictObj.result;