@OrangeKeks

Как разобрать json на классы и переменные в c#?

Добрый день, работаю с api элжура, я не понимаю как разобрать json данные, которые он мне присылает в ответ. Взгляните:
{
  "response": {
    "state": 200,
    "error": null,
    "result": {
      "students": {
        "17054": {
          "name": "17054",
          "title": "Не нужна Фамилия",
          "days": {
            "20241028": {
              "name": "20241028",
              "title": "Понедельник",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Русский язык",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }
              }
            },
            "20241029": {
              "name": "20241029",
              "title": "Вторник",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Русский язык",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }
              },
              "items_extday": [
                {
                  "name": "Теремок",
                  "grp": "NA",
                  "grp_short": "тер2б",
                  "starttime": "12:50:00",
                  "endtime": "13:30:00",
                  "topic": "",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 51,
                  "journal_title": "Дополнительное образование"
                }
              ]
            },
            "20241030": {
              "name": "20241030",
              "title": "Среда",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Математика",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }
              }
            },
            "20241031": {
              "name": "20241031",
              "title": "Четверг",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Русский язык",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }
              }
            },
            "20241101": {
              "name": "20241101",
              "title": "Пятница",
              "alert": "vacation",
              "items": [
                {
                  "name": "Классный час",
                  "num": "0",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 0
                },
                {
                  "name": "Русский язык",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }
              ],
              "items_extday": [
                {
                  "name": "Теремок",
                  "grp": "NA",
                  "grp_short": "тер2б",
                  "starttime": "13:10:00",
                  "endtime": "13:50:00",
                  "topic": "",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 51,
                  "journal_title": "Дополнительное образование"
                }
              ]
            }
          }
        },
        "6113": {
          "name": "6113",
          "title": "Не нужна Фамилия",
          "days": {
            "20241028": {
              "name": "20241028",
              "title": "Понедельник",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Физкультура",
                  "num": "1",
                  "room": "114 (спортзал)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 15578,
                  "sort": 10
                }
              }
            },
            "20241029": {
              "name": "20241029",
              "title": "Вторник",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Алгебра",
                  "num": "1",
                  "room": "304 (8)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 8,
                  "sort": 10
                }
              }
            },
            "20241030": {
              "name": "20241030",
              "title": "Среда",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Геометрия",
                  "num": "1",
                  "room": "304 (8)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 8,
                  "sort": 10
              }
            },
            "20241031": {
              "name": "20241031",
              "title": "Четверг",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Алгебра",
                  "num": "1",
                  "room": "304 (8)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 8,
                  "sort": 10
                },
                "2": {
                  "name": "ТВиС",
                  "num": "2",
                  "room": "304 (8)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 8,
                  "sort": 20
              }
            },
            "20241101": {
              "name": "20241101",
              "title": "Пятница",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Обществознание",
                  "num": "1",
                  "room": "213 (20)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 15466,
                  "sort": 10
                },
                "2": {
                  "name": "Обществознание",
                  "num": "2",
                  "room": "213 (20)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 15466,
                  "sort": 20
              }
            }
          }
        }
      }
    }
  }
}
}
}
}

Я не понимаю, как расшифровать данный json файл. Потому что в некоторых случаях переменная items является и массивом:
"items": [
                {
                  "name": "Классный час",
                  "num": "0",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 0
                },
                {
                  "name": "Русский язык",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }    
              ]

И классом:
"items": {
                "1": {
                  "name": "Русский язык",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }               
              }

А иногда массив "items_extday" присутствует:
"20241101": {
              "name": "20241101",
              "title": "Пятница",
              "alert": "vacation",
              "items": [
                {
                  "name": "Классный час",
                  "num": "0",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 0
                },
                {
                  "name": "Русский язык",
                  "num": "1",
                  "room": "106 (26)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 10
                }    
              ],
              "items_extday": [
                {
                  "name": "Теремок",
                  "grp": "NA",
                  "grp_short": "тер2б",
                  "starttime": "13:10:00",
                  "endtime": "13:50:00",
                  "topic": "",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 16286,
                  "sort": 51,
                  "journal_title": "Дополнительное образование"
                }
              ]
            }
          }
        },

А иногда его нет:
"20241101": {
              "name": "20241101",
              "title": "Пятница",
              "alert": "vacation",
              "items": {
                "1": {
                  "name": "Обществознание",
                  "num": "1",
                  "room": "213 (20)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 15466,
                  "sort": 10
                },
                "2": {
                  "name": "Обществознание",
                  "num": "2",
                  "room": "213 (20)",
                  "teacher": "Не нужна Фамилия",
                  "teacher_id": 15466,
                  "sort": 20    
              }
            }
          }

Помогите расшифровать данный json, чтобы он стал читабелен для c#.
Спасибо
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
  1. Пишете нужный класс с нужными данными: Как правильно описать класс для библиотеки Newtonsoft.Json C#?
  2. Открываете ман Newtonsoft.json в разделе конвертеров: https://www.newtonsoft.com/json/help/html/CustomJs... и далее в гугле.
  3. Пишете свой конвертер
  4. Радуетесь результату
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@UniverseElement
Копируем JSON в буфер обмена.

Создаём пустой C# файл. В нем не должно быть ничего, кроме указания namespace. Курсор поставим внутрь namespace, куда будет вставлен код созданных классов.

В меню Viusal Studio выбираем EDIT > Paste Special > Paste JSON as Classes.

В результате будут созданы необходимые C# классы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы