我想从app.config文件序列化一组对象以进行存储/检索。 (我正在使用Jeff Attwood的博客文章The Last Configuration Section Handler.. Revisited中的示例代码。)
我想知道的是为什么
类型的对象的集合public class MyClass
{
...
}
被序列化为名为
的xml元素<ArrayOfMyClass>...</ArrayOfMyClass>
在这个例子中,我使用的是MyClass对象的通用列表。我也尝试创建一个继承自List的新类,结果xml完全相同。
有没有办法覆盖序列化/反序列化时使用的xml元素名称?
答案 0 :(得分:4)
当你从List继承时,你可以尝试一些
[Serializable]
[System.Xml.Serialization.XmlRoot("SuperDuperCollection")]
public class SuperDuperCollection : List<MyClass> { ... }
装饰你的类,使用不同的XmlAttributes可以让你控制序列化时输出XML的方式。
使用一些测试代码和输出进行额外编辑:
[Serializable]
public class MyClass
{
public int SomeIdentifier { get; set; }
public string SomeData { get; set; }
}
....
SuperDuperCollection coll = new SuperDuperCollection
{
new MyClass{ SomeData = "Hello", SomeIdentifier = 1},
new MyClass{ SomeData = "World", SomeIdentifier = 2}
};
Console.WriteLine(XmlSerializeToString(coll));
输出:
<SuperDuperCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyClass>
<SomeIdentifier>1</SomeIdentifier>
<SomeData>Hello</SomeData>
</MyClass>
<MyClass>
<SomeIdentifier>2</SomeIdentifier>
<SomeData>World</SomeData>
</MyClass>
</SuperDuperCollection>
答案 1 :(得分:3)
如果它们是某种类型的子元素,则它们不会 - 您可以使用[XmlRoot]
,[XmlType]
,[XmlElement]
和[XmlArray]
以及[XmlArrayItem]
组合得到不同的结果 - 不幸的是,细节取决于确切的布局......
答案 2 :(得分:3)