反序列化分组数据(json)的问题

时间:2019-05-03 15:24:28

标签: c# json linq serialization deserialization

在将反序列化的JSON数据显示到datagridview中时,我遇到了一个问题(似乎是基本问题)。

我有一个简单的Person类:

class Person
{
    public int age { get; set; }
    public string name { get; set; }
    public string school { get; set; }     
}

还有五个人的名单:

Person p1 = new Person() { age = 12, name = "Peter", school = "s1" };
Person p2 = new Person() { age = 13, name = "Jack", school = "s2" };
Person p3 = new Person() { age = 14, name = "William", school = "s2" };
Person p4 = new Person() { age = 15, name = "Emily", school = "s2" };
Person p5 = new Person() { age = 16, name = "Sophie", school = "s1" };
List<Person> persons = new List<Person>() { p1, p2, p3, p4, p5 };

并在此列表上分组:

var result = from n in persons group n by n.school;

然后(问题在这里),我有一个序列化/反序列化过程:

var serialized = Newtonsoft.Json.JsonConvert.SerializeObject(result);
var deserialized = Newtonsoft.Json.JsonConvert.DeserializeObject(serialized);

不幸的是,我无法在datagridview中显示反序列化的结果(在此示例中应为“ s1”和“ s2”):

//failed! :(
dataGridView1.DataSource = deserialized;

问题出在哪里? Note1 :这是我的问题的简单演示。在实际程序中,我无法访问“人员”。并且字段名称(年龄,姓名,学校等)是未知的。我所拥有的只是序列化数据(“结果”变量的形式)。换句话说,“结果”变量是一个黑匣子。 注意2:据我所知,该问题仅出现在分组数据中。因此,如果“结果”(黑框)不包含分组,一切都会正常进行。但是我的问题是关于反序列化分组数据。

2 个答案:

答案 0 :(得分:1)

这里的问题是您没有指定所需的反序列化类型。

 Newtonsoft.Json.JsonConvert.DeserializeObject<List<List<Person>>>(serialized)

这应该可以解决问题

答案 1 :(得分:0)

纳尔皮尔的建议是正确的。您需要指定类型以反序列化json。您是否尝试过从中创建绑定源并将数据源设置为列表?

var list = JsonConvert.DeserializeObject<List<Person>>(serialized)
var bindingSource = new BindingSource();
bindingSource.DataSource = list;
dataGridView1.DataSource = bindingSource;