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); } }
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)); } }
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); } } }