.NET 框架中的 XML:在 .NET 框架中使用 XML 架构执行代码生成XmlSerializer 的内部原理

ZDNet软件频道 时间:2009-02-04 作者:Daniel Cazzulino | Microsoft 开发人员网络 我要评论()
本文关键词:.net xml 软件
.NET 框架中的 XML:在 .NET 框架中使用 XML 架构执行代码生成XmlSerializer 的内部原理

有了 CodeDom 以后,可以为追求自定义的开发人员带来大量能力和灵活性,但同时也带来了更大的责任。以这种方式修改代码会有危险,因为这会使代码不再按与架构兼容的方式进行序列化,或者 xmlSerializer 功能被完全破坏,并针对意外的节点和特性引发异常,从而无法检索值,等等。

因此,在处理生成的代码之前,绝对需要了解 xmlSerializer 的内部原理,当然也就需要一种了解其内部原理的方法。

当对象即将进行 xml 序列化时,将通过反射您传递给 xmlSerializer 构造函数的类型来创建一个临时程序集(这就是您需要那么做的原因)。请等一下!不要因为“反射”一词而感到害怕!这对于每个类型只执行一次,并且在 AppDomain 生命期内,将创建一对极为有效的 ReaderWriter 类来处理序列化和反序列化。

这些类继承了 System.xml.Serialization 命名空间中的 xmlSerializationReader 和 xmlSerializationWriter 公共类。它们还是 [TheTopSecretClassName]。如果您希望看一下这些动态生成的类,您只需向应用程序配置文件(对于 Web 应用程序,为 web.config)中添加以下设置:

<system.diagnostics> <switches> <add name="xmlSerialization.Compilation" value="4"/> </switches> </system.diagnostics>

现在,序列化程序将不会删除在该过程中生成的临时文件。对于 Web 应用程序,这些文件将位于 C:Documents and Settings[YourMachineName]ASPNETLocal SettingsTemp 中;或者,它们将位于当前用户的 Local SettingsTemp 文件夹中。

您将看到的代码就是当您希望有效地加载 .NET 中的 xml 时需要编写的代码:使用嵌套的 while 和 if 语句进行读取,使用 xmlReader 方法在数据流中向下移动,等等。使用这些丑陋代码的目的就是使该处理过程真正地快起来。

还可以通过使用 Chris Sells 的 XmlSerializerPreCompiler 工具来诊断所生成的这些类中的问题。

我们可以查看此代码,以便分析在序列化程序所生成的类中进行更改的效果。

查看本文来源

.net

xml

软件


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134