【问题标题】:Deserialize JSON with C# (Multiple Objects)使用 C# 反序列化 JSON(多个对象)
【发布时间】:2016-04-30 19:01:05
【问题描述】:

我正在尝试反序列化学校,然后稍后插入条形图。 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; }
}

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

【问题讨论】:

  • 格式已修改。

标签: c# serialization deserialization json-deserialization javascriptserializer


【解决方案1】:

您的问题是您的根 JSON 容器是一个数组,而不是一个对象:

  • 数组是值的有序集合。数组以[(左括号)开头,以](右括号)结尾。值由,(逗号)分隔。

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

一个 JSON 数组需要反序列化成一个集合,比如List&lt;T&gt;

如果我将你的 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 - 我不知道,我得看看你想做什么。但是,关于 stackoverflow 问题的推荐格式是one question per question。如果这个问题得到了回答,请将其标记为这样,然后向另一个人询问您正在尝试做的事情的详细信息。
  • 我现在已经完成了 - stackoverflow.com/questions/34982984/…。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多