闽公网安备 35020302035485号
using System.Text.Json;
// 堆代码 duidaima.com
var ceo = new Employee { NO = 1, Name = "CEO" };
ceo.Manager = ceo; // 这里报错
Console.WriteLine(JsonSerializer.Serialize(ceo));
Console.WriteLine("---------------");
var manager = new Employee { NO = 2, Name = "Manager" };
manager.Manager = ceo;
Console.WriteLine(JsonSerializer.Serialize(manager));
Console.WriteLine("---------------");
var employee = new Employee { NO = 3, Name = "Employee" };
employee.Manager = manager;
Console.WriteLine(JsonSerializer.Serialize(employee));
class Employee
{
public int NO { get; set; }
public string? Name { get; set; }
public Employee? Manager { get; set; }
}
运行,报错结果如下,出现了循环引用的异常:
using System.Text.Json;
using System.Text.Json.Serialization;
var ceo = new Employee { NO = 1, Name = "CEO" };
ceo.Manager = ceo;
Console.WriteLine(JsonSerializer.Serialize(ceo, ContextWithPreserveReference.Default.Employee));
Console.WriteLine("---------------");
var manager = new Employee { NO = 2, Name = "Manager" };
manager.Manager = ceo;
Console.WriteLine(JsonSerializer.Serialize(manager, ContextWithPreserveReference.Default.Employee));
Console.WriteLine("---------------");
var employee = new Employee { NO = 3, Name = "Employee" };
employee.Manager = manager;
Console.WriteLine(JsonSerializer.Serialize(employee, ContextWithPreserveReference.Default.Employee));
Console.ReadLine();
[JsonSourceGenerationOptions(ReferenceHandler = JsonKnownReferenceHandler.Preserve)]
[JsonSerializable(typeof(Employee))]
internal partial class ContextWithPreserveReference : JsonSerializerContext
{
}
class Employee
{
public int NO { get; set; }
public string? Name { get; set; }
public Employee? Manager { get; set; }
}
运行结果如下: