繁体   English   中英

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

[英]Deserialize JSON with C# (Multiple Objects)

我正在尝试将学校反序列化,然后插入条形图。 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();看到的输出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; }
}

任何人都可以帮助修改此代码,因为我找不到任何可以执行此操作的示例吗? 提前致谢。

您的问题是您的根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);
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM