簡體   English   中英

如何將JSON反序列化為簡單的Dictionary <string,object> 使用動態的datagridview?

[英]How can I deserialize JSON to a simple Dictionary<string,object> to datagridview using only dynamics?

我在網絡服務器的JSON中有一個簡單的鍵/值列表,需要將這些數據放在datagridview中,而不需要任何dll作為JSON.Net。 我發現Count等於三(數組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" } ] }

我會嘗試創建一個類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第三方庫而不是JavaScriptSerializer因為它的性能將優於JavaScriptSerializer

並且它使用非常簡單,使用JsonConvert.DeserializeObject<T>()可以將json反序列JsonConvert.DeserializeObject<T>()對象。

var dictObj = JsonConvert.DeserializeObject<RootObject>(Json);
datagridView1.DataSource = dictObj.result;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM