【问题标题】:How to programatically generate a serialization assembly or cs file like XmlSerializer would when using XmlAttributeOverrides?使用 XmlAttributeOverrides 时,如何以编程方式生成像 XmlSerializer 这样的序列化程序集或 cs 文件?
【发布时间】:2011-09-08 00:20:32
【问题描述】:

我想生成一个序列化程序集或 .cs 文件以使用 XmlAttributeOverrides 序列化我的类型,然后在我的项目中直接引用此程序集/.cs 文件,而不是使用 XmlSerializer 执行 xml 序列化/反序列化。这是因为序列化使用 XmlAttributeOverrides,并且当您创建具有覆盖的 XmlSerializer 时,它不会查找现有程序集,而是始终重新生成一个程序集 (reference)。我的程序在无法运行 csc.exe 的环境中运行,因此我无法在运行时生成序列化程序集。

需要明确的是,我不能只使用 sgen.exe,因为它只会生成执行默认 xml 序列化/反序列化的程序集。如果您创建一个 XmlSerializer 和 pass it XmlAttributeOverrides in the constructor 然后 Serialize() 和 Deserialize() 不使用由 sgen.exe 生成的程序集,因此 sgen.exe 对我来说似乎没有用。当使用覆盖时,XmlSerializer 总是会生成一个新的程序集。

那么,有没有一种方法可以调用 XmlSerializer 或其他类并让它创建一个可以包含在我的项目中的 .cs 文件或 dll?如果可能的话,我想自动化这个过程,这样每当我更改正在序列化的类型时,我都不需要进行手动更改。我不能使用 sgen.exe /k 因为它只会为一种类型生成默认的 XmlSerializer 而不是我需要的使用覆盖的类型。还有其他方法可以生成或捕获由 XmlSerializer 创建的 .cs 文件吗?

(我有一个相关的问题here 这是这个问题的根源)

【问题讨论】:

    标签: c# .net xml-serialization xmlserializer


    【解决方案1】:

    您可以在编译时生成程序集。在 Visual Studio 中打开项目properties,单击build 选项卡并向下滚动到Generate serialization assemblies

    将此设置为on 将在本地编译它们,以便它们可以与您的解决方案一起部署。它们也可以使用Sgen.exe 工具进行编译。请参阅here 了解更多信息。

    生成序列化程序集

    指定编译器是否会使用 XML Serializer Generator 用于创建 XML 序列化程序集的工具 (Sgen.exe)。序列化 程序集可以提高 XmlSerializer 的启动性能,如果你 已经使用该类来序列化代码中的类型。默认情况下,这 选项设置为 Auto,它指定序列化程序集 仅当您使用 XmlSerializer 对类型进行编码时才会生成 你的代码到 XML。 Off 指定序列化程序集永远不会 生成,无论您的代码是否使用 XmlSerializer。在 指定始终生成序列化程序集。 序列化程序集被命名为 TypeName.XmlSerializers.dll。为了 更多信息,请参阅XML Serializer Generator Tool (Sgen.exe)

    从上一条评论中我看到了您的问题。参考这个question,相信如果你使用XmlAttributeOverrides,总会生成程序集。

    因此,如果您无法启动 csc.exe,请不要使用 XmlAttributeOverrides

    【讨论】:

    • 不,那些序列化程序集仅适用于默认 xml。如果在调用 XmlSerializer.Serialize/Deserialize 时使用 XmlOverrides,则它不能使用那些序列化程序集。因此出现了问题。
    • 看反光板是没有办法的。
    猜你喜欢
    • 2010-10-26
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    相关资源
    最近更新 更多