使用C#反序列化JSON(多个对象)

3

我正在尝试反序列化一个学校对象,然后将其插入到柱状图中。JSON对象如下:

[{"Subject": "TEST APP","AppScores": [{"Season": "AAAAAAAAAAAAAAAAAAAA","year": "1"}, {"Season": "BBBBBBBBBBBBBBBBBBBBB","year": "2"}]}, {"Subject": "TEST APP2","AppScores": [{"Season": "CCCCCCCCCCC","year": "3"}, {"Season": "DDDDDDDDDDDDDDDDD","year": "4"}]}]

我希望在Console.WriteLine();中看到的输出结果是:
Subject: TEST APP
AppScores
Season: AAAAAAAAAAAAAAAAAAAA
Year: 1
Season: BBBBBBBBBBBBBBBBBBBBB
Year: 2
Subject: TESTAPP2
AppScores
Season: CCCCCCCCCCC
Year: 3
Season: DDDDDDDDDDDDDDDDD
Year: 4

我曾经看到过多种方式使用类似下面的代码来完成这个操作。
School subject = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<School>(json);
foreach (var item in subject.data)
{Console.WriteLine("season: {0}, year: {1}", item.season, item.year); Console.ReadLine();}

从类中调用:

public class School
{
public List<SchoolSubjects> data { get; set; }
}
public class SchoolSubjects
{
public string year { get; set; }
public string season { get; set; }
}

有人能帮忙修改这段代码吗?因为我找不到任何示例可以做到这一点。先感谢了。


formatting has been ammended. - TerrorTot38
1个回答

2
你的问题是你的根 JSON 容器是一个数组,而不是一个对象:
  • 一个数组是一个有序的值集合。一个数组以[(左方括号)开头,以](右方括号)结尾。值之间用,(逗号)隔开。

  • 一个对象是无序的名称/值对集合。一个对象以{(左大括号)开头,以}(右大括号)结尾。

JSON数组需要反序列化为集合,如List<T>

如果我上传你的JSON到 http://json2csharp.com/,我会得到以下更合适的类名:

public class SchoolSubjectAppScore
{
    public string Season { get; set; }
    public string year { get; set; }
}

public class SchoolSubject
{
    public SchoolSubject() { this.AppScores = new List<SchoolSubjectAppScore>(); }
    public string Subject { get; set; }
    public List<SchoolSubjectAppScore> AppScores { get; set; }
}

然后,您的JSON可以按以下方式反序列化并打印:
        var root = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<List<SchoolSubject>>(json);
        foreach (var subject in root)
        {
            Console.WriteLine(subject.Subject);

            foreach (var item in subject.AppScores)
            {
                Console.WriteLine("season: {0}, year: {1}", item.Season, item.year);
            }
        }

假设列表中的变量,例如item.season、item.year可以在柱状图中使用!你能帮我吗? - TerrorTot38
@TerrorTot38 - 我不知道,我需要看看你想做什么。然而,在stackoverflow上提问的推荐格式是一个问题对应一个帖子。如果这个问题已经得到了回答,请将其标记为已解决,并提出另一个帖子,详细说明你要做什么。 - dbc
我现在已经完成了这个任务 - http://stackoverflow.com/questions/34982984/json-file-to-view-in-mvc-bar-chart-c-sharp。感谢您的帮助。 - TerrorTot38

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接