TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1371 1.55K
День 1108. #ЧтоНовенького
Новинки System.Text.Json в .NET 6. Начало

1. Игнорирование циклических ссылок
В .NET 5 при обнаружении циклических ссылок выдавалось исключение JsonException. В .NET 6 их можно игнорировать:
JsonSerializerOptions options = new()
{
ReferenceHandler = ReferenceHandler.IgnoreCycles
};
string json = JsonSerializer.Serialize(myObj, options);

2. Уведомления при сериализации/десериализации
Появилось 4 новых интерфейса, которые можно реализовать в соответствии с вашими потребностями:
- IJsonOnDeserialized
- IJsonOnDeserializing
- IJsonOnSerialized
- IJsonOnSerializing

class Product : IJsonOnDeserialized, IJsonOnSerializing
{
public string Name { get; set; }
public string Test { get; set; }

void IJsonOnDeserialized.OnDeserialized()
=> Validate();
void IJsonOnSerializing.OnSerializing()
=> Validate();

private void Validate()
{
if (Name is null)
throw new InvalidOperationException(
"Name can't be null."
);
}
}

3. Порядок сериализации свойств
Атрибут JsonPropertyOrder позволяет контролировать порядок сериализации свойств:
class Product
{
// после Price
[JsonPropertyOrder(2)]
public string Category { get; set; }

// после свойств с порядком по умолчанию
[JsonPropertyOrder(1)]
public decimal Price { get; set; }

// порядок по умолчанию - 0
public string Name { get; set; }

// перед свойствами с порядком по умолчанию
[JsonPropertyOrder(-1)]
public int Id { get; set; }
}

Вывод:
{
"Id": 1,
"Name": "Surface Pro 7",
"Price": 550,
"Category": "Laptops"
}

4. Сериализация из/в поток
В .NET 6 добавлены перегрузки синхронных методов Serialize/Deserialize для потоков:
// десериализация из потока
using MemoryStream ms = new MemoryStream(bytes);
MyClass ex =
JsonSerializer.Deserialize<MyClass>(ms);

// сериализация в поток
JsonSerializerOptions options = new() {
WriteIndented = true
};

using Stream output = Console.OpenStandardOutput();

MyClass ex = new() { Value = "Test" };
JsonSerializer.Serialize<MyClass>(output, ex, options);

Окончание следует…

Источник:
https://blog.okyrylchuk.dev/system-text-json-features-in-the-dotnet-6
  • 👍 10
More from @netdeveloperdiary
  1. Oct 15, 2026Post #3374
  2. Oct 14, 2026Post #3373
  3. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  4. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  5. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  6. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →