使用 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();
中看到的输出
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();}
从 Class 呼叫:
public class School
{
public List<SchoolSubjects> data { get; set; }
}
public class SchoolSubjects
{
public string year { get; set; }
public string season { get; set; }
}
任何人都可以帮助修改此代码,因为我找不到任何可以这样做的示例吗?提前致谢。
你的问题是你的根 JSON 容器是一个数组,而不是一个对象:
数组是值的有序集合。数组以 [
(左括号)开始,以 ]
(右括号)结束。值由 ,
(逗号)分隔。
对象是 name/value 对的无序集合。对象以 {
(左大括号)开始,以 }
(右大括号)结束。
一个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);
}
}
我正在尝试反序列化一所学校,以便稍后插入到条形图中。 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();}
从 Class 呼叫:
public class School
{
public List<SchoolSubjects> data { get; set; }
}
public class SchoolSubjects
{
public string year { get; set; }
public string season { get; set; }
}
任何人都可以帮助修改此代码,因为我找不到任何可以这样做的示例吗?提前致谢。
你的问题是你的根 JSON 容器是一个数组,而不是一个对象:
数组是值的有序集合。数组以
[
(左括号)开始,以]
(右括号)结束。值由,
(逗号)分隔。对象是 name/value 对的无序集合。对象以
{
(左大括号)开始,以}
(右大括号)结束。
一个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);
}
}