<PackageReference Include="Castle.Core" Version="3.1.0" />

XmlCustomSerializer

using System; using System.Xml.Serialization; namespace Castle.Components.DictionaryAdapter.Xml { public class XmlCustomSerializer : XmlTypeSerializer { public static readonly XmlCustomSerializer Instance = new XmlCustomSerializer(); public override XmlTypeKind Kind => XmlTypeKind.Complex; private XmlCustomSerializer() { } public override object GetValue(IXmlNode node, IDictionaryAdapter parent, IXmlAccessor accessor) { IXmlSerializable xmlSerializable = (IXmlSerializable)Activator.CreateInstance(node.ClrType); using (XmlSubtreeReader reader = new XmlSubtreeReader(node, XmlDefaultSerializer.Root)) { xmlSerializable.ReadXml(reader); return xmlSerializable; } } public override void SetValue(IXmlNode node, IDictionaryAdapter parent, IXmlAccessor accessor, object oldValue, ref object value) { IXmlSerializable xmlSerializable = (IXmlSerializable)value; XmlRootAttribute root = XmlDefaultSerializer.Root; using (XmlSubtreeWriter xmlSubtreeWriter = new XmlSubtreeWriter(node)) { xmlSubtreeWriter.WriteStartElement(string.Empty, root.ElementName, root.Namespace); xmlSerializable.WriteXml(xmlSubtreeWriter); xmlSubtreeWriter.WriteEndElement(); } } } }