Как я могу десериализовать JSON в простой словарьчтобы datagridview используя только динамику? - PullRequest
1 голос
/ 14 июня 2019

У меня есть простой список ключей / значений в JSON с веб-сервера, и мне нужно поместить эти данные в таблицу данных без какой-либо 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" } ] }

1 Ответ

3 голосов
/ 14 июня 2019

Я бы попытался создать класс 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 для объекта.

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