diff --git a/src/ExtendedXmlSerializer/ExtensionModel/Defaults.cs b/src/ExtendedXmlSerializer/ExtensionModel/Defaults.cs index 92b6a4d5..9f88cd28 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 6615c03a..08694699 100644 --- a/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs +++ b/src/ExtendedXmlSerializer/ExtensionModel/Xml/CustomSerializers.cs @@ -5,7 +5,7 @@ namespace ExtendedXmlSerializer.ExtensionModel.Xml { sealed class CustomSerializers : Metadata, ICustomSerializers { - public CustomSerializers() : this(ExtensionModel.Defaults.TypeComparer) {} + 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 c68d729b..913e7ae8 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 356084c2..4fdca074 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 diff --git a/test/ExtendedXmlSerializer.Tests.ReportedIssues/Issue657Tests.cs b/test/ExtendedXmlSerializer.Tests.ReportedIssues/Issue657Tests.cs new file mode 100644 index 00000000..c2ed2237 --- /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) {} + } +} +