Чтобы ответить на мой собственный вопрос ..
Я выбрал это:
public class CustomXMLKeyValueList : IXmlSerializable
{
public List<CustomXMLKeyValueElement> Elements { get; set; }
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
//ToDo-experiment with this..
throw new NotImplementedException("This document can not be deserialized.");
}
public void WriteXml(XmlWriter writer)
{
foreach (var element in this.Elements)
{
element.WriteXml(writer);
}
}
}
public class CustomXMLKeyValueElement : IXmlSerializable
{
public string Key { get; set; }
public string Value { get; set; }
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
//ToDo-experiment with this..
throw new NotImplementedException("This document can not be deserialized.");
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement(this.Key);
writer.WriteString(this.Value);
writer.WriteEndElement();
}
}
public class KeyValueCustomXMLSerialization_Fixture
{
public void Test()
{
var kvl = new CustomXMLKeyValueList() { Elements = new List<CustomXMLKeyValueElement>() };
kvl.Elements.Add(new CustomXMLKeyValueElement() { Key = "key1", Value = "value1" });
kvl.Elements.Add(new CustomXMLKeyValueElement() { Key = "key2", Value = "value2" });
kvl.Elements.Add(new CustomXMLKeyValueElement() { Key = "key3", Value = "value3" });
var xml = Serializer.SerializeToXMLString(kvl, true, true);
}
}
Это не самое хорошее решение, но в конце его, xml var содержит следующую красивую строку:
<CustomXMLKeyValueList>
<key1>value1</key1>
<key2>value2</key2>
<key3>value3</key3>
</CustomXMLKeyValueList>
Serializer - это магический класс, который делает что-то вроде this , в то время как (из-за 'true, true') пропускаются пространства имен и объявления xml ..