TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3025 2.3K
День 2514. #ЗаметкиНаПолях
Не Используйте JSON-Сериализатор Напрямую в Коде. Окончание
Начало

Но что, если вы не можете внедрить ISerializer?

В этом случае вы можете зарегистрировать JsonSerializerOptions в DI-контейнере и использовать их напрямую:
using System.Text.Json;

var builder = WebApplication.CreateBuilder();

// добавьте сюда ваши настройки по умолчанию
var jsonSerializerOptions =
new JsonSerializerOptions(…);

builder.Services.AddSingleton<JsonSerializerOptions>(
jsonSerializerOptions);


Даже если у вас нет специфических настроек, лучше внедрить JsonSerializerOptions, задать свойства по умолчанию и использовать их везде, где требуется сериализация данных. Это важно, потому что библиотека может измениться, и её настройки по умолчанию также могут измениться. Если вы полагаетесь на настройки по умолчанию библиотеки, после обновления вы можете столкнуться с неожиданным поведением. Например, одно из обновлений Newtonsoft.Json изменило настройку по умолчанию о включении в JSON свойств со значением null. В предыдущей версии они включались, а в новой перестали.

Но в некоторых случаях и этого может быть недостаточно.

Например, при реализации пользовательского IResult путем расширения Results.Extensions нет возможности внедрить ни ISerializer, ни JsonSerializerOptions.

Тогда можно создать статический вспомогательный класс и использовать его.

Регистрация:
csharp 
using System.Text.Json;

var builder = WebApplication.CreateBuilder();

var jsonSerializerOptions
= new JsonSerializerOptions(…);

JsonSerializerOptionsProvider.Options
= jsonSerializerOptions;

builder.Services.AddSingleton<JsonSerializerOptions>(jsonSerializerOptions);

static class JsonSerializerOptionsProvider
{
public static JsonSerializerOptions
Options { get; set; }
}


Использование:
csharp 
public sealed class ErrorResult<TError>(TError error) : IResult
{
public Task ExecuteAsync(HttpContext ctx)
{
ctx.Response.StatusCode =
(int)HttpStatusCode.BadRequest;

return ctx.Response.WriteAsJsonAsync(
error,
JsonSerializerOptionsProvider.Options);
}
}


Источник: https://medium.com/@denmaklucky/dont-use-a-json-serializer-directly-in-your-code-instead-do-this-72f8eff3fdc5
  • 👍 4
  • 👎 1
More from @netdeveloperdiary
  1. Sep 29, 2026Фото 3 (с) Анатолий Кулаков
  2. Sep 29, 2026День 2799. Конференция DotNext 2026. Часть 1 25 и 26 сентября в Москве прошла очередная ко…
  3. Sep 28, 2026День 2798. #Оффтоп Утиная Типизация в C# с Помощью Перехватчиков. Часть 2 Некоторое время…
  4. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  5. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  6. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
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 →