diff --git a/AyCode.Core.Tests/Serialization/AcBinarySerializerCircularReferenceTests.cs b/AyCode.Core.Tests/Serialization/AcBinarySerializerCircularReferenceTests.cs index be9b228..9497f38 100644 --- a/AyCode.Core.Tests/Serialization/AcBinarySerializerCircularReferenceTests.cs +++ b/AyCode.Core.Tests/Serialization/AcBinarySerializerCircularReferenceTests.cs @@ -19,7 +19,11 @@ public class AcBinarySerializerCircularReferenceTests /// - StockTakingItem has Product navigation property /// [TestMethod] - public void Deserialize_CircularReference_ParentChildBackReference() + [DataRow(true, true)] + [DataRow(false, true)] + [DataRow(true, false)] + [DataRow(false, false)] + public void Deserialize_CircularReference_ParentChildBackReference(bool useSgen, bool useMeta) { var parent = new CircularParent { @@ -58,6 +62,10 @@ public class AcBinarySerializerCircularReferenceTests var option = AcBinarySerializerOptions.Default; option.ReferenceHandling = ReferenceHandlingMode.All; + option.UseGeneratedCode = useSgen; + option.UseMetadata = useMeta; + + Console.WriteLine($"\n========== ReferenceHandling: {option.ReferenceHandling}, UseSgen: {option.UseGeneratedCode}, UseMeta: {option.UseMetadata} =========="); var binary = parent.ToBinary(option); var result = binary.BinaryTo(); @@ -83,7 +91,11 @@ public class AcBinarySerializerCircularReferenceTests /// Test list of parents with circular references. /// [TestMethod] - public void Deserialize_ListOfCircularReferences_AllItemsCorrect() + [DataRow(true, true)] + [DataRow(false, true)] + [DataRow(true, false)] + [DataRow(false, false)] + public void Deserialize_ListOfCircularReferences_AllItemsCorrect(bool useSgen, bool useMeta) { var parents = Enumerable.Range(1, 5).Select(p => { @@ -132,6 +144,10 @@ public class AcBinarySerializerCircularReferenceTests var option = AcBinarySerializerOptions.Default; option.ReferenceHandling = ReferenceHandlingMode.All; + option.UseGeneratedCode = useSgen; + option.UseMetadata = useMeta; + + Console.WriteLine($"\n========== ReferenceHandling: {option.ReferenceHandling}, UseSgen: {option.UseGeneratedCode}, UseMeta: {option.UseMetadata} =========="); var binary = parents.ToBinary(option); var result = binary.BinaryTo>(); diff --git a/AyCode.Core.Tests/Serialization/AcBinarySerializerIIdReferenceTests.cs b/AyCode.Core.Tests/Serialization/AcBinarySerializerIIdReferenceTests.cs index d3926d4..da2cdea 100644 --- a/AyCode.Core.Tests/Serialization/AcBinarySerializerIIdReferenceTests.cs +++ b/AyCode.Core.Tests/Serialization/AcBinarySerializerIIdReferenceTests.cs @@ -82,7 +82,11 @@ public class AcBinarySerializerIIdReferenceTests /// Tests all ReferenceHandling modes: None, OnlyId, All /// [TestMethod] - public void SameInstance_SerializeAndDeserialize() + [DataRow(true, true)] + [DataRow(false, true)] + [DataRow(true, false)] + [DataRow(false, false)] + public void SameInstance_SerializeAndDeserialize(bool useSgen, bool useMeta) { var modes = new[] { @@ -93,8 +97,6 @@ public class AcBinarySerializerIIdReferenceTests foreach (var mode in modes) { - Console.WriteLine($"\n========== ReferenceHandling: {mode} =========="); - // Arrange: SAME instance used multiple times var userPreferences = new UserPreferences(); var sharedTag = new SharedTag { Id = 1, Name = "ImportantTag", Color = "#FF0000" }; @@ -119,7 +121,13 @@ public class AcBinarySerializerIIdReferenceTests order.Items[1].ParentOrder = order; - var options = new AcBinarySerializerOptions { ReferenceHandling = mode }; + var options = new AcBinarySerializerOptions + { + ReferenceHandling = mode, + UseGeneratedCode = useSgen + }; + + Console.WriteLine($"\n========== ReferenceHandling: {options.ReferenceHandling}, UseSgen: {options.UseGeneratedCode}, UseMeta: {options.UseMetadata} =========="); // Act var binary = AcBinarySerializer.Serialize(order, options); diff --git a/AyCode.Core/Serializers/Binaries/AcBinarySerializerOptions.cs b/AyCode.Core/Serializers/Binaries/AcBinarySerializerOptions.cs index 6b01f75..7d6d1a3 100644 --- a/AyCode.Core/Serializers/Binaries/AcBinarySerializerOptions.cs +++ b/AyCode.Core/Serializers/Binaries/AcBinarySerializerOptions.cs @@ -82,9 +82,9 @@ public sealed class AcBinarySerializerOptions : AcSerializerOptions /// allowing the deserializer to match properties by name between different types. /// Default: false (no overhead) /// - public bool UseMetadata { get; set; } = false; + public bool UseMetadata { get; set; } = true; - public bool UseGeneratedCode { get; set; } = true; + public bool UseGeneratedCode { get; set; } = false; /// /// Controls how string interning is applied during serialization.