Mercurial > pub > ImplabNet
comparison 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 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 272:9d1cca834b05 | 273:79110a16cab7 | 
|---|---|
| 1 using System; | |
| 2 using System.Xml; | |
| 3 using System.Xml.Serialization; | |
| 4 | |
| 5 namespace Implab.ServiceHost.Unity | |
| 6 { | |
| 7 public class SerializedElement : AbstractRegistration { | |
| 8 [XmlAttribute("href")] | |
| 9 public string Location { get; set; } | |
| 10 | |
| 11 [XmlAttribute("serializedType")] | |
| 12 public string SerializedType { get; set; } | |
| 13 | |
| 14 | |
| 15 [XmlAnyElement] | |
| 16 public XmlElement[] Content { get; set; } | |
| 17 | |
| 18 public override void Visit(ContainerContext context) { | |
| 19 context.Visit(this); | |
| 20 } | |
| 21 | |
| 22 public virtual Type ResolveSerializedType(ContainerContext context) { | |
| 23 if(string.IsNullOrEmpty(SerializedType)) | |
| 24 return ResolveRegistrationType(context); | |
| 25 return context.Resolve(SerializedType); | |
| 26 } | |
| 27 | |
| 28 public virtual object GetValue(ContainerContext context) { | |
| 29 var type = ResolveRegistrationType(context); | |
| 30 if (Content == null || Content.Length == 0) | |
| 31 return Safe.CreateDefaultValue(type); | |
| 32 | |
| 33 var serializer = new XmlSerializer(type); | |
| 34 using(var reader = Content[0].CreateNavigator().ReadSubtree()) | |
| 35 return serializer.Deserialize(reader); | |
| 36 } | |
| 37 } | |
| 38 } | 
