您需要创建一个单独的类来保存XmlAttribute
和XmlText
。
public class Entry
{
[XmlAttribute("key")]
public string Key { get; set; }
[XmlText]
public string Value { get; set; }
}
[Serializable]
[XmlRoot(ElementName = "xml")]
public class MyXml
{
[XmlArray(ElementName = "metadata")]
[XmlArrayItem(ElementName = "entry")]
public List<Entry> Metadata { get; set; }
}
然后你可以用你选择的序列化程序对它进行序列化。
var item = new MyXml
{
Metadata = new List<Entry>
{
new Entry { Key = "key1", Value = "entry1" },
new Entry { Key = "key2", Value = "entry2" },
new Entry { Key = "key3", Value = "entry3" }
}
};
var serializer = new XmlSerializer(typeof(MyXml));
string xml;
using(var stream = new StringWriter())
using(var writer = XmlWriter.Create(stream,
new XmlWriterSettings { Indent = true }))
{
serializer.Serialize(writer, item);
xml = stream.ToString();
}
Console.WriteLine(xml);
结果:
<?xml version="1.0" encoding="utf-16"?>
<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<metadata>
<entry key="key1">entry1</entry>
<entry key="key2">entry2</entry>
<entry key="key3">entry3</entry>
</metadata>
</xml>