Вы можете использовать ExtendedXmlSerializer. Если у вас есть класс:
public class TestClass
{
public Dictionary<int, string> Dictionary { get; set; }
}
и создать экземпляр этого класса:
var obj = new TestClass
{
Dictionary = new Dictionary<int, string>
{
{1, "First"},
{2, "Second"},
{3, "Other"},
}
};
Вы можете сериализовать этот объект с помощью 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 будет выглядеть следующим образом:
<?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>
Вы можете установить ExtendedXmlSerializer из nuget или выполнить следующую команду:
Install-Package ExtendedXmlSerializer
Или использовать этот код: http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx – prostynick
Какие методы/properties в словаре подразумевает, что он должен быть реализован как хеш-таблица? Словарь и IDictionary - это коллекции пар Key/Value и отличаются от реализации Hashtable. С точки зрения сериализации наша цель состоит в том, чтобы извлечь данные из энергозависимой памяти, чтобы иметь возможность загрузить ее позже. Перезагрузка * любых * данных в другую конкретную реализацию интерфейса приведет к поведению. – Jeremy
Сериализация KeyValuePair не работает. У вас будет пустой тег. См. Https://stackoverflow.com/questions/2658916/serializing-a-list-of-key-value-pairs-to-xml – NullAndVoid