Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1287 of 1492 menu
◀ ▶

ReferenceHandler

Без ReferenceHandler цикл node.Next = node даёт JsonException. ReferenceHandler.IgnoreCycles записывает повтор как null. Проверяют подстроку ""Next":null" в результате Serialize.

Синтаксис

options.ReferenceHandler = ReferenceHandler.IgnoreCycles;

Пример

Давайте поймаем цикл без обработчика:

using System; using System.Text.Json; class Node { public Node Next { get; set; } } class Program { static void Main() { Node node = new Node(); node.Next = node; try { JsonSerializer.Serialize(node); } catch (JsonException) { Console.WriteLine("fail"); } } }

Результат выполнения кода:

"fail"

Пример

Давайте сериализовать с IgnoreCycles:

using System; using System.Text.Json; using System.Text.Json.Serialization; class Node { public Node Next { get; set; } } class Program { static void Main() { var options = new JsonSerializerOptions { ReferenceHandler = ReferenceHandler.IgnoreCycles }; Node node = new Node(); node.Next = node; string res = JsonSerializer.Serialize(node, options); Console.WriteLine(res.Contains("\"Next\":null")); } }

Результат выполнения кода:

True

Пример

Давайте убедимся, что следующий узел записан объектом:

using System; using System.Text.Json; using System.Text.Json.Serialization; class Node { public Node Next { get; set; } } class Program { static void Main() { var options = new JsonSerializerOptions { ReferenceHandler = ReferenceHandler.IgnoreCycles }; Node first = new Node(); Node second = new Node(); first.Next = second; string res = JsonSerializer.Serialize(first, options); bool nested = res.Contains("\"Next\":{"); Console.WriteLine(nested); } }

Результат выполнения кода:

True

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить