Сохранение данных в формате json

Первый раз пользуюсь json, по этому даже не знаю как правильно загуглить. Пишу бота для telegram. При пересылке сообщения из другого канала у меня в json должны записываться текст этого сообщения и FileId видео в этом сообщении. Собственно, всё работает. Но записывается не совсем в формате json (на картинке). То есть с таким же успехом я мог бы и в txt записывать. Хочу записывать в формате типа:

  {
   "Video": {
     "Caption": "блаблаблабла",
     "FileId": "KaKoYTOidTipa1337"
  }

Но совершенно не знаю как это сделать. Пишу вот такой код:

//путь к json файлу
string jsonFileName = "/Users/josephbreat/Projects/PonememiBot/PonememiBot/SandBox.json";
//сохраняю содержимое json'a в переменную
string jsonOldString = File.ReadAllText(jsonFileName);
//сохраняю в переменную старое содержимое + новое содержимое (Caption и FileID)
string jsonString = jsonOldString + message?.Caption + "\r" + message?.Video?.FileId + "\r" + "\r";
//записываю содержимое переменной в json файл
File.WriteAllText(jsonFileName, jsonString);

введите сюда описание изображения


Ответы (1 шт):

Автор решения: aepot

Создать модель данных

public class Data
{
    public VideoInfo Video { get; set; }
}

public class VideoInfo
{
    public string Caption { get; set; }
    public string FileId { get; set; }
}

Подключить неймспейс

using System.Text.Json;

Написать код

Data data = new Data()
{
    Video = new VideoInfo()
    {
        Caption = "блаблаблабла",
        FileId = "KaKoYTOidTipa1337"
    }
};
string json = JsonSerializer.Serialize(data);
File.WriteAllText(json);

Если нужен красивый вывод для отладки

var options = new JsonSerializerOptions
{
    WriteIndented = true,
    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
string json = JsonSerializer.Serialize(data, options);
→ Ссылка