给定一种类型,例如:
public class FooList : List<Foo>
{
public string SomeMessage { get; set; }
}
如何在不重写序列化本身的情况下使
SomeMessage
属性与集合一起序列化?我得到的是:
<FooList>
<Foo />
<Foo />
<Foo />
</FooList>
我想要的是:
<FooList>
<SomeMessage />
<Foo />
<Foo />
<Foo />
</FooList>
不管出于什么原因(我认为这是因为用于泛型列表的序列化没有看到新属性),它没有被写出。
如果重要的话,这里是我用来序列化它的。
FooList content = new FooList();
content.SomeMessage="this is a test";
//add foos
using (TextWriter writer = new StreamWriter("C:\\foos.xml"))
{
XmlSerializer serializer = new XmlSerializer(typeof(FooList));
serializer.Serialize(writer, content);
}
最佳答案
当XmlSerializer
序列化集合时,它只考虑集合的项。类中声明的任何额外属性都将被忽略。您要么必须实现IXmlSerializable
来提供自己的序列化逻辑,要么更改类的设计。
你可以这样做:
[XmlRoot("FooList")]
public class FooListContainer
{
public string SomeMessage { get; set; }
[XmlElement("Foo")]
public List<Foo> Foos { get; set; }
}