3

Я пытаюсь десериализовать школу, а затем вставить в диаграмму позже. Объект JSON выглядит следующим образом:Deserialize JSON с C# (несколько объектов)

[{"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; } 
} 

Может кто-нибудь помочь, чтобы изменить этот код, как я не могу найти ни одного примера, который бы сделал это? Заранее спасибо.

+0

форматирование было ammended , – TerrorTot38

ответ

1

Ваша проблема заключается в том, что ваш корневой 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); 
      } 
     } 
+0

Предположим, что переменные из списка, например item.season, item.year могут использоваться в гистограмме! Можете ли вы мне помочь? – TerrorTot38

+0

@ TerrorTot38 - Я не знаю, мне нужно будет посмотреть, что вы пытаетесь сделать. Однако рекомендуемый формат вопросов для stackoverflow - это [один вопрос на вопрос] (http://meta.stackexchange.com/questions/39223/one-post-with-multiple-questions-or-multiple-posts). Если на этот вопрос будет дан ответ, отметьте его как таковой и спросите другого с подробностями того, что вы пытаетесь сделать. – dbc

+0

Я сейчас сделал это - http://stackoverflow.com/questions/34982984/json-file-to-view-in-mvc-bar-chart-c-sharp. Спасибо за вашу помощь. – TerrorTot38

Смежные вопросы