【发布时间】:2012-08-24 05:58:31
【问题描述】:
我遇到了使用XmlSerializer 序列化IEnumerable 的问题。由于IEnumerable 表示object 的列表,XmlSerializer 并不提前知道它需要序列化什么类型。但是因为它需要知道,所以当遇到object以外的类型时,它会抛出一个InvalidOperationException。
类型 Foo.Bar 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。
XmlIncludeAttribute 旨在应用于方法以指示返回值可以是某种类型。但是,IEnumerable 没有我可以添加属性的方法。
我尝试将它们应用于GetEnumerator:
public class Bar : IEnumerable
{
private List<object> list;
public Bar()
{
}
[XmlInclude(typeof(Bar))]
[XmlInclude(typeof(ChildBar))]
public IEnumerator GetEnumerator()
{
return list.GetEnumerator();
}
public void Add(Bar bar)
{
list.Add(bar);
}
public void Add(ChildBar childBar)
{
list.Add(childBar);
}
// used for deserialization
public void Add(object o)
{
if (o is Bar || o is ChildBar)
{
list.Add(o);
}
}
// more irrelevant stuff
}
public class ChildBar
{
public ChildBar()
{
}
// more irrelevant stuff
}
这并没有解决它,我不知道在哪里可以使用这些属性。
我应该把它们放在哪里?我可以在没有他们的情况下解决它吗?我可以避免编写自己的枚举器吗?
【问题讨论】:
标签: c# .net serialization xml-serialization ienumerable