控制派生类型的序列化

6 c# xml serialization

给定一个类型,例如:

public class FooList : List<Foo>
{
    public string SomeMessage { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何SomeMessage在不覆盖序列化本身的情况下使属性与集合一起序列化?

我得到的是:

<FooList>
    <Foo />
    <Foo />
    <Foo />
</FooList>
Run Code Online (Sandbox Code Playgroud)

我想要的是:

<FooList>
    <SomeMessage />
    <Foo />
    <Foo />
    <Foo />
</FooList>
Run Code Online (Sandbox Code Playgroud)

无论出于什么原因,(我认为这是因为用于通用列表的序列化没有看到新属性),因此没有被写出。

万一重要,这是我用来序列化的内容。

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);
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 2

XmlSerializer序列化集合时,它仅考虑集合的项目。类中声明的任何额外属性都将被忽略。您要么必须实现IXmlSerializable以提供您自己的序列化逻辑,要么更改类的设计。

你可以这样做:

[XmlRoot("FooList")]
public class FooListContainer
{
    public string SomeMessage { get; set; }

    [XmlElement("Foo")]
    public List<Foo> Foos { get; set; }
}
Run Code Online (Sandbox Code Playgroud)