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();
                }
            }
        }
        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);
            }
        }
Exemplo n.º 3
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));
            }
        }
Exemplo n.º 4
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);
                }
            }
        }