Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1109. #ЧтоНовенького Новинки System.Text.Json в .NET 6. Окончание Начало 5. Поддержка IAsyncEnumerable Сериализация IAsyncEnumerable преобразует его в массив.
static async IAsyncEnumerable<int> GetAsync(int n)
{
  for (int i = 0; i < n; i++)
  {
    await Task.Delay(1000);
    yield return i;
  }
}

JsonSerializerOptions options = new() { 
  WriteIndented = true
};
using Stream output = 
  Console.OpenStandardOutput();

var data = new { Data = GetAsync(5) };

await JsonSerializer.SerializeAsync(
  output, data, options);

Для десериализации JSON-массивов корневого уровня добавлен метод DeserializeAsyncEnumerable:
// оборачивает текст в IAsyncEnumerable<T>
using MemoryStream stream =
  new(Encoding.UTF8.GetBytes("[0,1,2,3,4]"));

await foreach (int item in
  JsonSerializer.DeserializeAsyncEnumerable<int>(stream))
{
  Console.WriteLine(item);
}

6. Работа с JSON как с DOM .NET 6 предоставляет типы для произвольного доступа к элементам JSON в структурированном представлении данных. Новые типы из пространства имён System.Text.Json.Nodes: - JsonArray - JsonNode - JsonObject - JsonValue
// Парсим объект JSON
var node = JsonNode.Parse(
 "{\"Value\":\"Text\",\"Array\":[1,5,13,17,2]}"
);

string value = (string)node["Value"];
// либо
value = node["Value"].GetValue<string>();
Console.WriteLine(value); // Text

int item = node["Array"][1].GetValue<int>();
// либо
item = (int)node["Array"][1];
Console.WriteLine(arrayItem); // 5

// Создаём JsonObject
var obj = new JsonObject
{
  ["Value"] = "Text",
  ["Array"] = new JsonArray(1, 5, 13, 17, 2)
};
Console.WriteLine(obj["Value"]); // Text
Console.WriteLine(obj["Array"][1]); // 5

// преобразуем в строку
string json = obj.ToJsonString();
Console.WriteLine(json); 
// {"Value":"Text","Array":[1,5,13,17,2]}

Источник: blog.okyrylchuk.dev/system-…dotnet-6