给定一个类型,例如:
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)
当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)
| 归档时间: |
|
| 查看次数: |
5473 次 |
| 最近记录: |