Ejemplo n.º 1
0
        public void Read(IValueProvider value, XElement serialized)
        {
            var name     = serialized.Name.LocalName;
            var type     = FindDerivedType(value.Type, name);
            var instance = Activator.CreateInstance(type);

            var discoveryStrategy = ValueDiscoveryStrategy.Get(type) ?? valueDiscovery;
            var values            = discoveryStrategy.GetValues(instance);

            foreach (var property in values)
            {
                var attribute = serialized.Attribute(property.Name);
                if (attribute != null)
                {
                    MEFHost.Instance.SerializationService.Read(property, attribute.Value);
                    continue;
                }

                var subElement = serialized.Element(property.Name);
                if (subElement != null)
                {
                    MEFHost.Instance.SerializationService.Read(property, subElement);
                    continue;
                }
            }

            value.SetValue(instance);
        }
Ejemplo n.º 2
0
        public object Write(IValueProvider value)
        {
            var instance = value.GetValue <object>();
            var result   = new XElement(value.Name);

            var discoveryStrategy = ValueDiscoveryStrategy.Get(instance.GetType()) ?? valueDiscovery;
            var values            = discoveryStrategy.GetValues(instance);

            foreach (var property in values)
            {
                var serialized = MEFHost.Instance.SerializationService.Write(property);

                if (serialized is string)
                {
                    var attribute = new XAttribute(property.Name, serialized.ToString());
                    result.Add(attribute);
                }
                else if (serialized is XElement)
                {
                    result.Add(new XElement(property.Name, serialized));
                }
            }

            return(result);
        }