private void SerializeDictionaryItem(IDictionary dic, DictionaryEntry entry, DictionaryPropertyDescriptor propDesc, DictionaryKeyValuePropertyDescriptor keyDesc, DictionaryKeyValuePropertyDescriptor valueDesc, XmlTextWriter writer, XmlSerializerContext context) { //escribo el item string itemName = propDesc.GetElementNameForDictionaryItem(context); object key = entry.Key; object value = entry.Value; IXmlConverter converter; if (key != null) { writer.WriteStartElement(itemName); Type keyType = key.GetType(); if (keyDesc.IsXmlAttribute(keyType, context)) { converter = context.GetConverter(keyType); converter.ToXml(dic, keyDesc, key, writer, context); } if (value != null) { Type valueType = value.GetType(); if (valueDesc.IsXmlAttribute(valueType, context)) { converter = context.GetConverter(valueType); converter.ToXml(dic, valueDesc, value, writer, context); } } //escribo los elementos if (keyDesc.IsXmlElement(keyType, context)) { converter = context.GetConverter(keyType); converter.ToXml(dic, keyDesc, key, writer, context); } if (value != null) { Type valueType = value.GetType(); if (valueDesc.IsXmlElement(valueType, context)) { converter = context.GetConverter(valueType); converter.ToXml(dic, valueDesc, value, writer, context); } } writer.WriteEndElement(); } }