Mercurial > pub > ImplabNet
diff Implab.ServiceHost/Unity/SerializedElement.cs @ 273:79110a16cab7 v3
Working on Unity xml configuration: Refactoring in progress
author | cin |
---|---|
date | Thu, 26 Apr 2018 19:35:01 +0300 |
parents | |
children | 22629bf26121 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab.ServiceHost/Unity/SerializedElement.cs Thu Apr 26 19:35:01 2018 +0300 @@ -0,0 +1,38 @@ +using System; +using System.Xml; +using System.Xml.Serialization; + +namespace Implab.ServiceHost.Unity +{ + public class SerializedElement : AbstractRegistration { + [XmlAttribute("href")] + public string Location { get; set; } + + [XmlAttribute("serializedType")] + public string SerializedType { get; set; } + + + [XmlAnyElement] + public XmlElement[] Content { get; set; } + + public override void Visit(ContainerContext context) { + context.Visit(this); + } + + public virtual Type ResolveSerializedType(ContainerContext context) { + if(string.IsNullOrEmpty(SerializedType)) + return ResolveRegistrationType(context); + return context.Resolve(SerializedType); + } + + public virtual object GetValue(ContainerContext context) { + var type = ResolveRegistrationType(context); + if (Content == null || Content.Length == 0) + return Safe.CreateDefaultValue(type); + + var serializer = new XmlSerializer(type); + using(var reader = Content[0].CreateNavigator().ReadSubtree()) + return serializer.Deserialize(reader); + } + } +} \ No newline at end of file