给定一种类型,例如:

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; }
}

07-28 03:35