protected override void WriteValue(XmlWriter writer, object value)
        {
            IDictionary dictionary = (IDictionary)value;

            foreach (object key in dictionary.Keys)
            {
                object target = dictionary[key];

                // any way to refactor code block?
                ReflectorTypeAttribute typeAttribute = ReflectorTypeAttribute.GetAttribute(target);
                if (typeAttribute == null)
                {
                    writer.WriteStartElement(elementName);
                    writer.WriteAttributeString(attribute.Key, key.ToString());
                    writer.WriteString(target.ToString());
                    writer.WriteEndElement();
                }
                else
                {
                    writer.WriteStartElement(typeAttribute.Name);
                    writer.WriteAttributeString(attribute.Key, key.ToString());

                    XmlTypeSerialiser serialiser = (XmlTypeSerialiser)typeAttribute.CreateSerialiser(target.GetType());
                    serialiser.WriteMembers(writer, target);

                    writer.WriteEndElement();
                }
            }
        }
        public void Write(object target)
        {
            NetReflector.CheckNull(target, "target", typeof(object));

            ReflectorTypeAttribute attribute = ReflectorTypeAttribute.GetAttribute(target);

            if (attribute == null)
            {
                throw new NetReflectorException(string.Format("Cannot serialise the object.  Target object type ({0}) is not marked with a ReflectorType attribute.", target.GetType()));
            }
            attribute.Write(writer, target);
        }
        protected virtual void WriteValue(XmlWriter writer, object value)
        {
            ReflectorTypeAttribute attribute = ReflectorTypeAttribute.GetAttribute(value);

            if (attribute == null)
            {
                writer.WriteString(value.ToString());
            }
            else
            {
                XmlTypeSerialiser serialiser = (XmlTypeSerialiser)attribute.CreateSerialiser(value.GetType());
                serialiser.WriteMembers(writer, value);
            }
        }
        public virtual void Write(XmlWriter writer, object target)
        {
            object value = member.GetValue(target);

            if (value != null && IsSerializableValue(value))
            {
                writer.WriteStartElement(attribute.Name);
                if (attribute.InstanceTypeKey != null)
                {
                    ReflectorTypeAttribute typeAttribute = ReflectorTypeAttribute.GetAttribute(value);
                    writer.WriteAttributeString(attribute.InstanceTypeKey, typeAttribute.Name);
                }
                WriteValue(writer, value);
                writer.WriteEndElement();
            }
        }
 protected virtual object Read(XmlNode childNode, Type instanceType, NetReflectorTypeTable table)
 {
     if (ReflectionUtil.IsCommonType(instanceType))
     {
         if ((childNode.Attributes != null) && (childNode.Attributes.Count > 0))
         {
             throw new NetReflectorException(
                       string.Format("Attributes are not allowed on {3} types - {0} attributes(s) found on '{1}'" + Environment.NewLine +
                                     "Xml: {2}",
                                     childNode.Attributes.Count,
                                     childNode.Name,
                                     childNode.OuterXml,
                                     instanceType.Name));
         }
         return(childNode.InnerText);
     }
     else
     {
         ReflectorTypeAttribute reflectorTypeAttribute = ReflectorTypeAttribute.GetAttribute(instanceType);
         if (reflectorTypeAttribute == null)
         {
             if (!string.IsNullOrEmpty(attribute.InstanceTypeKey))
             {
                 throw new NetReflectorException(
                           string.Format("Unable to find reflector type for '{0}' when deserialising '{1}' - '{3}' has not been set" + Environment.NewLine +
                                         "Xml: {2}",
                                         instanceType.Name,
                                         childNode.Name,
                                         childNode.OuterXml,
                                         attribute.InstanceTypeKey));
             }
             else
             {
                 throw new NetReflectorException(
                           string.Format("Unable to find reflector type for '{0}' when deserialising '{1}'" + Environment.NewLine +
                                         "Xml: {2}",
                                         instanceType.Name,
                                         childNode.Name,
                                         childNode.OuterXml));
             }
         }
         IXmlSerialiser serialiser = table[reflectorTypeAttribute.Name];
         // null check
         return(serialiser.Read(childNode, table));
     }
 }
Beispiel #6
0
        public void Add(Type type)
        {
            ReflectorTypeAttribute attribute = ReflectorTypeAttribute.GetAttribute(type);

            if (attribute == null)
            {
                return;
            }

            if (!reflectorTypes.Contains(attribute.Name))
            {
                IXmlSerialiser serialiser = attribute.CreateSerialiser(type, instantiator);
                reflectorTypes.Add(attribute.Name, serialiser);
            }
            else if (type != this[attribute.Name].Type)
            {
                throw new NetReflectorException(string.Format(@"Multiple types exist with the same ReflectorTypeAttribute name ""{0}"": ({1}, {2})",
                                                              attribute.Name, type, this[attribute.Name].Type));
            }
        }
Beispiel #7
0
        protected override void WriteValue(XmlWriter writer, object value)
        {
            foreach (object element in ((IEnumerable)value))
            {
                if (element == null)
                {
                    continue;
                }

                ReflectorTypeAttribute attribute = ReflectorTypeAttribute.GetAttribute(element);
                if (attribute == null)
                {
                    writer.WriteElementString(elementName, element.ToString());
                }
                else
                {
                    // make more concise?
                    IXmlSerialiser serialiser = attribute.CreateSerialiser(element.GetType());
                    serialiser.Write(writer, element);
                }
            }
        }
 private bool IsSerializableValue(object value)
 {
     return(attribute.InstanceTypeKey == null || ReflectorTypeAttribute.GetAttribute(value) != null);
 }