Десериализовать JSON в очередь C# пользовательского объекта

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

В настоящее время я конвертирую отдельные файлы для игры, над которой я работаю, в объект JSON. В настоящее время структура песни выглядит следующим образом:

        public readonly int Id = 1;

        public readonly int BPM = 120;
        public readonly string Name = "Baby's";

        public readonly string Artist = "Brian";

        protected Song SongFile;

        public Queue<NoteChart> Chart = new Queue<NoteChart>();

        Chart.Enqueue(new NoteChart { gemType = 1, Key = "D", Lane = 8, beatTime = new TimeSpan(0, 0, 0, 5, 84) });
 

Довольно стандартные вещи, я полагаю. В любом случае, у меня есть iddue, превращающий этот Chart.Enqueue в объект JSON, поэтому я могу анализировать его таким образом, а не печатать. Пока у меня есть:

  "Id": 1,
  "BPM": 120,
  "Name": "Baby",
  "Artist": "Brian",
  "SongFile": "Songs/Baby",
  "Chart": {
  }

Но, как видите, я застрял на графике. Как мне успешно преобразовать его в JSON для преобразования в С#? Или есть лучший способ сделать это?

Спасибо!

Visual Studio может «вставить JSON как классы», также посмотрите на System.Text.Json, чтобы десериализовать его.

aepot 25.11.2022 01:42

Спасибо, aepot, я понял эту часть и прошу прощения, если мой вопрос был сформулирован нечетко; Меня больше интересовало, как превратить строку Chart.Enque в верхнем коде в эквивалент JSON. Однако, спасибо!

sylargaf 25.11.2022 01:43
string json = JsonSerializer.Serialize(Chart) learn.microsoft.com/en-us/dotnet/standard/serialization/…
aepot 25.11.2022 01:45

Можно ли в любом случае пропустить шаг создания его сначала на С# и вместо этого создать все это в JSON?

sylargaf 25.11.2022 01:55

Конечно, реализуйте вручную паттерн «Конечный автомат» с помощью Utf8JsonReader/*Writer. Кстати, я не могу понять, как вы можете сделать это на С# без С#.

aepot 25.11.2022 01:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
5
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

не могу найти ни одной проблемы

var chartItem = new ChartItem();

var json = JsonConvert.SerializeObject(chartItem, Newtonsoft.Json.Formatting.Indented);

public class ChartItem
{
    public readonly int Id = 1;

    public readonly int BPM = 120;
    public readonly string Name = "Baby's";

    public readonly string Artist = "Brian";

    protected string SongFile;

    public Queue<object> Chart =new ();
    
    public ChartItem ()
    {
        Chart.Enqueue(new  { gemType = 1, Key = "D", Lane = 8, beatTime = new TimeSpan(0, 0, 0, 5, 84) });
    }
    
}

json

{
  "Id": 1,
  "BPM": 120,
  "Name": "Baby's",
  "Artist": "Brian",
  "Chart": [
    {
      "gemType": 1,
      "Key": "D",
      "Lane": 8,
      "beatTime": "00:00:05.0840000"
    }
  ]
}

Покойся с миром, всемогущий JSON.NET

aepot 25.11.2022 02:01

@aepot Покойся с миром, всемогущий Text.Json. Слава замечательному Newtonsoft.Json! Лучшая библиотека json!

Serge 25.11.2022 02:03

Никаких больше наггетсов! :)

aepot 25.11.2022 02:04

@aepot Слава самородкам. Самая популярная сетевая утилита

Serge 25.11.2022 02:06

Что ж, они двое детей одного отца, да здравствует Джеймс Ньютон Кинг!

Alberto Chiesa 25.11.2022 02:17

@AlbertoChiesa Да, вы правы. Да здравствует Джеймс Ньютон Кинг! И, кстати, его ответ на вопрос о Newtonsoft.Json был отвергнут 15 раз на этом ресурсе. И ему сказали, что он ошибается и не знает, как работает Newtonsoft.Json. Вы можете поискать и найти его ответ здесь.

Serge 25.11.2022 02:33
stackoverflow.com/a/40274581/1395758 на память.
Alberto Chiesa 25.11.2022 02:43

Другие вопросы по теме