我用 XMLSerializer 类做了一些事情。像大多数初学者一样,我在应用程序启动时面临性能问题。我阅读了很多博客、文章,最后使用了 SGEN 工具。现在性能看起来不错,但我仍然不清楚一些事情。
1)我应该使用这样的SGEN语法:
SGen.exe /assembly:MyAssembly /type:MyRootXmlType
或者就足够了(我目前使用这种语法,我的程序集中只有一个可序列化类):
SGen.exe /assembly:MyAssembly
/type 参数何时在实践中有用?
2)我在MSDN上读到(http://msdn.microsoft.com/en-us/library/ee704594.aspx )
该命令生成序列化器
集会
MyAssembly.XmlSerializers.dll,其中
应添加为对
当前项目或 GAC。
但在所有其他博客和文章(例如在 SO 上)上,我读到只需将 MyAssembly.XmlSerializers.dll 放入 MyAssembly 存在的文件夹中就足够了。
那么什么是正确的呢?
3)生成 .XmlSerilizers.dll 并将其与 MyAssembly 一起部署就足够了,还是应该在代码中添加一些内容?
我不这么认为,但我想确保我不必更改我的代码,并且“魔法”会自动发生。
如果您不使用 sgen.exe 的 /type 参数,那么它将生成反/序列化代码all程序集中的公共类型。请注意,XML 序列化中不使用 [Serializable] 属性。我怀疑你会想要这个,使用 /type 来保持生成的程序集较小。
添加引用不是必需的,无论如何,Xml 序列化总是在 .XmlSerializers.dll 程序集上尝试 Assembly.Load()。另外,您永远不会直接在代码中引用生成的 XmlSerializationWriterXxx 和 XmlSerializationReaderXxx 类。它确实有一个优点,当您将项目包含在解决方案中时,构建系统将自动复制程序集。
仅当不同的应用程序序列化和反序列化 XML 文件时才值得考虑将其安装在 GAC 中。您也可以通过手动复制程序集来为其他应用程序提供 .XmlSerializers.dll 程序集。这有点容易出错,请自行判断。检查上一段以了解自动复制的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)