8

我用 XMLSerializer 类做一些事情。像大多数初学者一样,我在应用启动时遇到性能问题。我阅读了很多博客、文章,最后使用了 SGEN 工具。现在性能看起来还不错,但对我来说仍然有几件事不清楚。

1)我应该像这样使用 SGEN 语法:

SGen.exe /assembly:MyAssembly /type:MyRootXmlType

或者它就足够了(我目前使用这种语法,我的程序集中只有一个 Serializable 类):

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 一起部署就足够了,还是我应该在我的代码中添加一些东西?

我不这么认为,但我想确保我不必更改我的代码并且“魔法”会自动发生。

4

1 回答 1

10

如果您不使用 sgen.exe 的 /type 参数,那么它将为程序集中的所有公共类型生成反序列化代码。请注意,在 XML 序列化中不使用 [Serializable] 属性。我怀疑你想要这个,使用 /type 来保持生成的程序集很小。

不需要添加引用,Xml 序列化总是在 .XmlSerializers.dll 程序集上尝试 Assembly.Load() 。此外,您永远不会直接在代码中引用生成的 XmlSerializationWriterXxx 和 XmlSerializationReaderXxx 类。它确实有一个优点,当您将项目包含在解决方案中时,构建系统会自动复制程序集。

只有当不同的应用程序对 XML 文件进行序列化和反序列化时,才值得考虑在 GAC 中安装它。您也可以通过手动复制程序集来为其他应用程序提供 .XmlSerializers.dll 程序集。这有点容易出错,请在此处使用您自己的判断。检查上一段以了解自动复制的方法。

于 2010-03-30T12:44:08.920 回答