TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1900 1.59K
День 1555. #ЗаметкиНаПолях
Как Исключить Свойства при Сериализации в JSON. Окончание
Начало

4. Игнорировать все свойства с null или default
Можно не учитывать при сериализации свойства со значениями null или значениями по умолчанию для типа (default).
public class Book
{
public int Id { get; set; }
public string? Title { get; set; }
public int? Pages { get; set; }
public int Sells { get; set; }
public Author? Author { get; set; }
}

var book = new Book()
{
Id = 1,
Title = "Dracula"
};

В System.Text.Json для этого нужно задать опцию DefaultIgnoreCondition со значением WhenWritingNull или WhenWritingDefault соответственно:
var json1 = JsonSerializer.Serialize(book, 
new JsonSerializerOptions
{
DefaultIgnoreCondition
= JsonIgnoreCondition.WhenWritingNull
// или JsonIgnoreCondition.WhenWritingDefault
});

В Newtonsoft.Json нужно задать параметры NullValueHandling или DefaultValueHandling соответственно:
var json2 = JsonConvert.SerializeObject(book,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
// или
// DefaultValueHandling =
// DefaultValueHandling.Ignore
});

Вывод:
{
"Id": 1,
"Title": "Dracula",
"Sells": 0
}
Если мы зададим игнорирование значений по умолчанию, то свойства "Sells" не будет в выводе.

5. Используем IContractResolver
Newtonsoft.Json предоставляет этот интерфейс для тонкой настройки сериализации. Проще всего создать класс, унаследованный от DefaultContractResolver, в котором либо:
- переопределить метод CreateProperty, который позволяет обратиться к метаданным свойства и задать ему булево значение ShouldSerialize, определяющее, должно ли свойство попасть в вывод при сериализации,
- переопределить метод CreateProperties, который должен вернуть список свойств, попадающих в вывод при сериализации.
После создания класса, реализующего этот интерфейс, его можно подключить в настройках сериализации:
var json = JsonConvert.SerializeObject(book, 
new JsonSerializerSettings
{
ContractResolver =
new MyPropertiesResolver()
});

Пример создания класса ContractResolver можно найти здесь.

Источник: https://code-maze.com/csharp-exclude-properties-from-json-serialization/
  • 👍 19
More from @netdeveloperdiary
  1. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  2. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  3. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  4. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  5. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  6. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
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 →