protected override void Serialize(object target, XmlElementContext context) { var obj = XmlElementSerializer.GetElement(context.XElement, true, _xmlElementTarget); if (!(obj is XElement)) { throw new InvalidOperationException("Attributes not Supported"); } _serializer?.Serialize(context.XElement.CreateWriter(), GetValue(target)); }
protected override void Deserialize(object target, XmlElementContext context) { var obj = XmlElementSerializer.GetElement(context.XElement, false, _xmlElementTarget); if (!(obj is XElement ele)) { return; } SetValue(target, _serializer?.Deserialize(ele.CreateReader(ReaderOptions.OmitDuplicateNamespaces))); }
protected override SerializationContext GetRealContext(XmlElementContext origial, SerializerMode mode) { if (!(XmlElementSerializer.GetElement(origial.XElement, mode == SerializerMode.Serialize, _target) is XElement ele)) { _useSnapShot = false; return(origial.Original); } _useSnapShot = true; return(origial.Original.CreateSnapshot(ele.Value)); }
private IEnumerable <XElement>?GetElements(bool forWrite, [NotNull] XElement context, int count) { var realRoot = XmlElementSerializer.GetElement(context, forWrite, _rootTarget) as XElement; if (realRoot == null && forWrite) { throw new InvalidOperationException("Attributes not Supported"); } return(realRoot == null ? Enumerable.Empty <XElement>() : XmlElementSerializer.GetElements(realRoot, forWrite, _target, count)); }