我正在尝试使用 XmlSerializer 来保存 List(T),其中 T 是一个接口。序列化器不喜欢接口。我很好奇是否有一种简单的方法可以使用 XmlSerializer 轻松序列化异构对象列表。这就是我想要的:
public interface IAnimal
{
int Age();
}
public class Dog : IAnimal
{
public int Age()
{
return 1;
}
}
public class Cat : IAnimal
{
public int Age()
{
return 1;
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
var animals = new List<IAnimal>
{
new Dog(),
new Cat()
};
var x = new XmlSerializer(animals.GetType());
var b = new StringBuilder();
var w = XmlTextWriter.Create(b, new XmlWriterSettings { NewLineChars = "\r\n", Indent = true });
//FAIL - cannot serialize interface. Does easy way to do this exist?
x.Serialize(w, animals);
var s = b.ToString();
}
您也可以使用 XmlSerializer,但您需要包含正在序列化的对象图中可能出现的所有可能类型,这限制了可扩展性并降低了可维护性。您可以通过使用 XmlSerializer 构造函数的重载来完成此操作:
var x = new XmlSerializer(animals.GetType(), new Type[] { typeof(Cat), typeof(Dog) });
此外,使用 XmlSerializer 时还有几个需要注意的问题,所有概述的问题这里(MSDN) http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx- 例如,查看标题“动态生成的程序集”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)