如果物件 A 裡面有 B,B 又有 A(互相參考),JSON.NET 會無限遞迴,造成 StackOverflow 或例外。
1 2 3 4 5 6 7 8 9
classNode { public Node Next { get; set; } } var node1 = new Node(); var node2 = new Node(); node1.Next = node2; node2.Next = node1; // 循環參考 var clone = node1.DeepCloneByJson(); // ❌ 出錯
privatestaticvoidAutoMappingDeepClone(IServiceProvider services) { var source = new Entitys.Person(); source.Address = "hisn"; source.Age = 18; source.Name = "YL"; source.Pets = new List<Entitys.Pet> { new Entitys.Pet { Name = "Party"}, new Entitys.Pet { Name = "Mochi"} };
var loggerFactory = services.GetRequiredService<ILoggerFactory>(); var config = new MapperConfiguration(cfg => { cfg.CreateMap<Entitys.Person, Entitys.Person>(); cfg.CreateMap<Entitys.Pet, Entitys.Pet>(); }, loggerFactory);
var mapper = config.CreateMapper(); var target = new Entitys.Person(); mapper.Map(source, target); target.Age = 20; target.Address = "chaung"; target.Name = "pan";