.NET框架中的XML:XmlSerializer的内部原理

开发 后端
本文介绍XmlSerializer的内部原理。

XmlSerializer 的内部原理

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

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

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

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

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

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

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

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

【编辑推荐】

  1. .NET框架中的XML基础类:xsd.exe
  2. ASP.NET 2.0页面状态持续:ViewState与控件
  3. ASP.NET 2.0数据绑定控件的自定义集合
  4. 列表控件示例:HeadlineList
  5. ASP.NET 2.0数据绑定机制:生成控件
责任编辑:yangsai 来源: MSDN
相关推荐

2009-08-05 18:42:05

xsd.exe

2009-08-21 16:55:10

.NET框架与XML

2009-08-05 16:32:25

Smooks 1.2框

2024-03-25 03:00:00

.NET 6await编程

2009-02-27 08:56:30

IIS.Net原理分析

2009-07-28 14:40:15

XML数据ASP.NET

2023-06-07 15:25:19

Kafka版本日志

2009-09-02 18:28:55

.NET框架ESBasic

2022-03-24 10:23:51

时间轮方法任务

2009-10-27 11:16:20

VB.NET应用框架

2024-06-18 13:17:02

数据库框架

2010-09-15 09:18:21

ASP.NET MVC

2009-10-28 11:13:39

VB.NET虚拟框架

2009-07-23 15:11:43

XML Web服务方法ASP.NET

2020-03-12 11:29:51

JavaScript浏览器语言

2020-03-05 16:47:51

Git内部储存

2009-07-24 11:20:43

ASP.NET MVC

2011-05-18 14:29:49

XML层叠样式

2009-07-31 18:12:58

ASP.NET数据绑定

2009-07-22 10:34:37

ActionInvokASP.NET MVC
点赞
收藏

51CTO技术栈公众号