我创建了有3个类的测试应用程序
作为序列化过程,当我创建XmlSerializer对象的实例时,我使用2个对象来测试
XmlSerializer xmlSerializer = new XmlSerializer(typeof(SportCar));和
XmlSerializer xmlSerializer = new XmlSerializer(
typeof(SportCar),
new Type[] { typeof(Car), typeof(Radio) }); 这2种方法的结果是相同的,所以我想知道这2种构造函数或需要使用#2构造函数的临界点之间的区别是什么?
发布于 2009-06-19 07:23:38
最大的区别是当您需要告诉XmlSerializer有关子类的内容时--例如:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Car),
new Type[] { typeof(SportCar), typeof(Radio) });在这里,如果没有额外的信息,如果不知道(仅仅从Car)知道SportCar或Radio,那么如果给它一个实际上是SportCar的对象,它就会失败:
Car car = new SportCar {...};
xmlSerializer.Serialize(destination, car);还可以根据[XmlInclude(typeof(SportCar))]类型定义设置Car:
[XmlInclude(typeof(SportCar))]
public class Car {...}这比较容易,但只有在Car类型位于了解SportCar的程序集中时才有可能。但是您经常知道这一点,所以XmlInclude是首选的选择。
此外,XmlInclude也有一些效率的好处;在幕后,系统使用动态类型生成来提高XmlSerializer的效率。因此,通常应该保持(并重用)所创建的XmlSerializer实例;例如,将其存储在静态字段中。但是,对于默认用法(new XmlSerializer(typeof(Car))),系统会自动执行此操作--也就是说,无论您使用这个构造函数多少次,它只生成一次动态代码。如果使用更复杂的构造函数(new XmlSerializer(typeof(Car),new Type[] { typeof(SportCar), typeof(Radio) })),则每次都会进行类型生成。
https://stackoverflow.com/questions/1016721
复制相似问题