在将反序列化的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:据我所知,该问题仅出现在分组数据中。因此,如果“结果”(黑框)不包含分组,一切都会正常进行。但是我的问题是关于反序列化分组数据。
答案 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;