Ano*_*ous 5 .net c# xml xml-serialization
我创建了具有3个类的测试应用程序
作为序列化过程,当我创建XmlSerializer对象的实例时,我使用2个对象进行测试
XmlSerializer xmlSerializer = new XmlSerializer(typeof(SportCar));
Run Code Online (Sandbox Code Playgroud)
和
XmlSerializer xmlSerializer = new XmlSerializer(
typeof(SportCar),
new Type[] { typeof(Car), typeof(Radio) });
Run Code Online (Sandbox Code Playgroud)
这两种方法的结果是相同的,所以我想知道这两个构造函数或需要使用#2构造函数的关键点之间有什么区别?
最大的区别是,当你需要告诉XmlSerializer有关子类-例如:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Car),
new Type[] { typeof(SportCar), typeof(Radio) });
Run Code Online (Sandbox Code Playgroud)
在这里,没有额外的信息,如果不知道(只是Car)关于任何一个SportCar或Radio- 所以如果你给它一个实际上是一个对象SportCar,它将失败:
Car car = new SportCar {...};
xmlSerializer.Serialize(destination, car);
Run Code Online (Sandbox Code Playgroud)
您也可以通过设置做到这一点[XmlInclude(typeof(SportCar))]对Car类型定义:
[XmlInclude(typeof(SportCar))]
public class Car {...}
Run Code Online (Sandbox Code Playgroud)
这更容易,但只有在Car类型位于已知的程序集中时才可能SportCar.但是,你经常做知道这一点,所以XmlInclude是较好的选择.
另外:有一些效率优势XmlInclude; 在幕后,系统使用动态类型生成来XmlSerializer提高效率.因此,您通常应该保留(并重新使用)XmlSerializer您创建的实例; 例如,通过将其存储在静态字段中.但是,系统会自动为默认用法(new XmlSerializer(typeof(Car)))执行此操作- 即无论您使用此构造函数多少次,它只生成一次动态代码.如果你使用更复杂的构造函数(new XmlSerializer(typeof(Car),new Type[] { typeof(SportCar), typeof(Radio) })),它将每次都进行类型生成.
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |