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

XmlCollectionSerializer

public abstract class XmlCollectionSerializer : XmlTypeSerializer
using System; using System.Collections; namespace Castle.Components.DictionaryAdapter.Xml { public abstract class XmlCollectionSerializer : XmlTypeSerializer { public override XmlTypeKind Kind => XmlTypeKind.Collection; public override bool CanGetStub => true; public abstract Type ListTypeConstructor { get; } public override object GetStub(IXmlNode node, IDictionaryAdapter parent, IXmlAccessor accessor) { return GetValueCore(node, parent, accessor); } public override object GetValue(IXmlNode node, IDictionaryAdapter parent, IXmlAccessor accessor) { return GetValueCore(node.Save(), parent, accessor); } private object GetValueCore(IXmlNode node, IDictionaryAdapter parent, IXmlAccessor accessor) { Type type = node.ClrType.GetGenericArguments()[0]; Type type2 = ListTypeConstructor.MakeGenericType(type); IXmlCollectionAccessor collectionAccessor = accessor.GetCollectionAccessor(type); return Activator.CreateInstance(type2, node, parent, collectionAccessor); } public override void SetValue(IXmlNode node, IDictionaryAdapter parent, IXmlAccessor accessor, object oldValue, ref object value) { IXmlNodeSource xmlNodeSource = value as IXmlNodeSource; if (xmlNodeSource == null || !xmlNodeSource.Node.PositionEquals(node)) { IEnumerable enumerable = value as IEnumerable; if (enumerable == null) throw Error.NotSupported(); (oldValue as ICollectionProjection)?.ClearReferences(); ICollectionProjection collectionProjection = (ICollectionProjection)GetValue(node, parent, accessor); collectionProjection.Replace(enumerable); value = collectionProjection; } } } }