From 9f3573bfdb3d7ddbbb7a86f12d1843b95ef80cd3 Mon Sep 17 00:00:00 2001 From: Mike-E Date: Tue, 8 Jul 2025 03:51:35 -0400 Subject: [PATCH 1/2] Adjusted custom serializers to have specific type selector --- .../ExtensionModel/Xml/CustomSerializers.cs | 6 +- .../Issue657Tests.cs | 58 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 test/ExtendedXmlSerializer.Tests.ReportedIssues/Issue657Tests.cs diff --git a/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs b/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs index 6615c03a9..810ec6717 100644 --- a/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs +++ b/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs @@ -1,11 +1,13 @@ -using System.Collections.Generic; +using ExtendedXmlSerializer.ReflectionModel; +using System.Collections.Generic; using System.Reflection; namespace ExtendedXmlSerializer.ExtensionModel.Xml { sealed class CustomSerializers : Metadata, ICustomSerializers { - public CustomSerializers() : this(ExtensionModel.Defaults.TypeComparer) {} + public CustomSerializers() + : this(new CompositeTypeComparer(TypeIdentityComparer.Default, InheritedTypeComparer.Default)) {} public CustomSerializers(IEqualityComparer comparer) : base(comparer) {} } diff --git a/test/ExtendedXmlSerializer.Tests.ReportedIssues/Issue657Tests.cs b/test/ExtendedXmlSerializer.Tests.ReportedIssues/Issue657Tests.cs new file mode 100644 index 000000000..c2ed22375 --- /dev/null +++ b/test/ExtendedXmlSerializer.Tests.ReportedIssues/Issue657Tests.cs @@ -0,0 +1,58 @@ +using ExtendedXmlSerializer.Configuration; +using ExtendedXmlSerializer.ContentModel; +using ExtendedXmlSerializer.ContentModel.Format; +using ExtendedXmlSerializer.Tests.ReportedIssues.Support; +using FluentAssertions; +using System.Collections.Generic; +using System.Xml.Serialization; +using Xunit; + +namespace ExtendedXmlSerializer.Tests.ReportedIssues; + +public sealed class Issue657Tests +{ + [Fact] + public void Verify() + { + var subject = new ConfigurationContainer() + .EnableImplicitTyping(typeof(ClsItem), typeof(ClsArray)) + .Type().Register().Serializer().Using(new ClsItemSerializer()) //.CustomSerializer(new ClsItemSerializer()) + .Create().ForTesting(); + var content = + @"
44tank
"; + var instance = new ClsRoot() { new ClsArray() { new ClsItem(){ Dataname = "tank" } } }; + subject.Deserialize(content).Should().BeEquivalentTo(instance); + + } + + + public interface IDataElement + { + string Dataname { get; set; } + } + + [XmlRoot("main")] + public class ClsRoot : List + { + + } + [XmlType("array")] + public class ClsArray : List, IDataElement + { + public string Dataname { get ; set; } + } + [XmlType("item")] + public class ClsItem : IDataElement + { + public string Dataname { get; set; } + } + + + class ClsItemSerializer : ISerializer + { + public ClsItem Get(IFormatReader parameter) => new(); + + public void Write(IFormatWriter writer, ClsItem instance) {} + } +} + From 5af5d3c25341c2ef3a1b2ce4933326453e0276a5 Mon Sep 17 00:00:00 2001 From: Mike-E Date: Tue, 8 Jul 2025 03:58:44 -0400 Subject: [PATCH 2/2] Apply specific/inherited selection to Xml + members --- src/ExtendedXmlSerializer/ExtensionModel/Defaults.cs | 3 +++ .../ExtensionModel/Xml/CustomSerializers.cs | 6 ++---- .../ExtensionModel/Xml/CustomXmlSerializers.cs | 2 +- .../ExtensionModel/Xml/MemberCustomSerializers.cs | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/ExtendedXmlSerializer/ExtensionModel/Defaults.cs b/src/ExtendedXmlSerializer/ExtensionModel/Defaults.cs index 92b6a4d53..9f88cd28e 100644 --- a/src/ExtendedXmlSerializer/ExtensionModel/Defaults.cs +++ b/src/ExtendedXmlSerializer/ExtensionModel/Defaults.cs @@ -12,5 +12,8 @@ static class Defaults = new CompositeTypeComparer(ImplementedTypeComparer.Default, TypeIdentityComparer.Default, InheritedTypeComparer.Default); + + public static ITypeComparer SpecificTypeComparer { get; } + = new CompositeTypeComparer(TypeIdentityComparer.Default, InheritedTypeComparer.Default); } } \ No newline at end of file diff --git a/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs b/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs index 810ec6717..086946994 100644 --- a/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs +++ b/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs @@ -1,13 +1,11 @@ -using ExtendedXmlSerializer.ReflectionModel; -using System.Collections.Generic; +using System.Collections.Generic; using System.Reflection; namespace ExtendedXmlSerializer.ExtensionModel.Xml { sealed class CustomSerializers : Metadata, ICustomSerializers { - public CustomSerializers() - : this(new CompositeTypeComparer(TypeIdentityComparer.Default, InheritedTypeComparer.Default)) {} + public CustomSerializers() : this(ExtensionModel.Defaults.SpecificTypeComparer) {} public CustomSerializers(IEqualityComparer comparer) : base(comparer) {} } diff --git a/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomXmlSerializers.cs b/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomXmlSerializers.cs index c68d729b9..913e7ae8b 100644 --- a/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomXmlSerializers.cs +++ b/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomXmlSerializers.cs @@ -4,6 +4,6 @@ namespace ExtendedXmlSerializer.ExtensionModel.Xml { sealed class CustomXmlSerializers : Metadata, ICustomXmlSerializers { - public CustomXmlSerializers() : base(ReflectionModel.Defaults.TypeComparer) {} + public CustomXmlSerializers() : base(ExtensionModel.Defaults.SpecificTypeComparer) {} } } \ No newline at end of file diff --git a/src/ExtendedXmlSerializer/ExtensionModel/Xml/MemberCustomSerializers.cs b/src/ExtendedXmlSerializer/ExtensionModel/Xml/MemberCustomSerializers.cs index 356084c28..4fdca074c 100644 --- a/src/ExtendedXmlSerializer/ExtensionModel/Xml/MemberCustomSerializers.cs +++ b/src/ExtendedXmlSerializer/ExtensionModel/Xml/MemberCustomSerializers.cs @@ -5,6 +5,6 @@ namespace ExtendedXmlSerializer.ExtensionModel.Xml { sealed class MemberCustomSerializers : Metadata, ICustomMemberSerializers { - public MemberCustomSerializers() : base(MemberComparer.Default) {} + public MemberCustomSerializers() : base(new MemberComparer(ExtensionModel.Defaults.SpecificTypeComparer)) {} } } \ No newline at end of file