Puede usar ExtendedXmlSerializer. Si usted tiene una clase:
public class TestClass
{
public Dictionary<int, string> Dictionary { get; set; }
}
y crear instancia de esta clase:
var obj = new TestClass
{
Dictionary = new Dictionary<int, string>
{
{1, "First"},
{2, "Second"},
{3, "Other"},
}
};
puede serializar este objeto usando ExtendedXmlSerializer:
var serializer = new ConfigurationContainer()
.UseOptimizedNamespaces() //If you want to have all namespaces in root element
.Create();
var xml = serializer.Serialize(
new XmlWriterSettings { Indent = true }, //If you want to formated xml
obj);
XML de salida se verá así:
<?xml version="1.0" encoding="utf-8"?>
<TestClass xmlns:sys="https://extendedxmlserializer.github.io/system" xmlns:exs="https://extendedxmlserializer.github.io/v2" xmlns="clr-namespace:ExtendedXmlSerializer.Samples;assembly=ExtendedXmlSerializer.Samples">
<Dictionary>
<sys:Item>
<Key>1</Key>
<Value>First</Value>
</sys:Item>
<sys:Item>
<Key>2</Key>
<Value>Second</Value>
</sys:Item>
<sys:Item>
<Key>3</Key>
<Value>Other</Value>
</sys:Item>
</Dictionary>
</TestClass>
Puede instalar ExtendedXmlSerializer de nuget o ejecutar el siguiente comando:
Install-Package ExtendedXmlSerializer
O utilice el código: http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx – prostynick
¿Qué métodos/propiedades en Diccionario implican que debe implementarse como una tabla hash? Dictionary e IDictionary son colecciones de pares Key/Value y son distintos de la implementación de Hashtable. Desde una perspectiva de serialización nuestro objetivo parece ser sacar datos de la memoria volátil para poder volver a cargarlos en otro momento. Recargar * cualquier * información en una implementación concreta diferente de una interfaz va a dar como resultado un comportamiento diferente. – Jeremy
Serializando KeyValuePair no funciona. Usted terminará con una etiqueta vacía. Ver: https://stackoverflow.com/questions/2658916/serializing-a-list-of-key-value-pairs-to-xml – NullAndVoid