Когда в .net 5 вышли Source Generators я честно был восхищен, но был нюанс 🙂 Типа, круто, что мы теперь в компилятор что-то подпихнуть можем, но нахера?))) Так вот, .net 6 так сказать прояснил ситуацию для тупых, добавив фичу JsonSerializerContext.
Поговаривают, с ее использованием можно поднять производительность json-сериализации до 40%. Сильно ли нужно заморочиться, чтобы вкрутить у себя? Я и сам в шоке, но оказывается – нет!
Есть у вас класс Person, который вы хотите передать по Интернетам:
public class Person
{
public string FirstName { get; set; } = default!;
public string SecondName { get; set; } = default! ;
}
И раньше вы делали так:
var person = new Person
{
FirstName = "Mr",
SecondName = "Anderson"
};
var personText = JsonSerializer.Serialize(person);
А потом передавали уже в виде байтиков сериализованную персону.
Что нужно сделать, чтобы ускорить эту строку на 40%? Создать вот такой partial класс:
[JsonSerializable(typeof(Person))]
public partial class PersonJsonContext: JsonSerializerContext
{
}
И в строчке прописать один параметр PersonJsonContext.Default.Person:
var personText = JsonSerializer.Serialize(person, PersonJsonContext.Default.Person);
Один параметр, Карл! Ради сорока процентов производительности! Мне кажется, что это стоит того напряжения, учитывая, сколько сериализаций содержит твое web-приложение!