在2.0正式版发布之前,就满天的看到关于DataTable支持序列化的新特性宣传,满以为从此以后使用DataTable就和DataSet一样方便了,结果在应用项目的时候才发现并非那么回事。
  DataTable是支持序列化了,但是微软并没有把他做的特别方便,还需要我们自己来做一些工作之后才能够在WebService里面传递DataTable,否则在引用DataTable的时候会发现DataTable变成了一个什么Proxy类型。
  首先编写类DataTableSchemaImporterExtension,代码如下:
ASP.NET 2.0 WebService中传递DataTable参考using System;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Collections.Generic;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Text;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Xml.Serialization.Advanced;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Collections;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Xml.Schema;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Xml.Serialization;
ASP.NET 2.0 WebService中传递DataTable参考
using System.CodeDom;
ASP.NET 2.0 WebService中传递DataTable参考
using System.CodeDom.Compiler;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Xml;
ASP.NET 2.0 WebService中传递DataTable参考
using System.Data;
ASP.NET 2.0 WebService中传递DataTable参考
ASP.NET 2.0 WebService中传递DataTable参考
namespace Xrinehart.Tools.WebService.SchemaImporter
  为此类添加进一个项目中,并将此项目进行强命名后编译。

  然后,把该Assembly程序集加入到GAC中。

  最后修改本机的machine.config,代码如下:
ASP.NET 2.0 WebService中传递DataTable参考      <sectionGroup name="system.xml.serialization" type="System.Xml.Serialization.Configuration.SerializationSectionGroup, System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
ASP.NET 2.0 WebService中传递DataTable参考      
<section name="schemaImporterExtensions" type="System.Xml.Serialization.Configuration.SchemaImporterExtensionsSection, System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
ASP.NET 2.0 WebService中传递DataTable参考      
<section name="dateTimeSerialization" type="System.Xml.Serialization.Configuration.DateTimeSerializationSection, System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
ASP.NET 2.0 WebService中传递DataTable参考      
<section name="xmlSerializer" type="System.Xml.Serialization.Configuration.XmlSerializerSection, System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
ASP.NET 2.0 WebService中传递DataTable参考      
</sectionGroup>
ASP.NET 2.0 WebService中传递DataTable参考 
ASP.NET 2.0 WebService中传递DataTable参考 
ASP.NET 2.0 WebService中传递DataTable参考 
ASP.NET 2.0 WebService中传递DataTable参考 
ASP.NET 2.0 WebService中传递DataTable参考  
<system.xml.serialization>
ASP.NET 2.0 WebService中传递DataTable参考     
<schemaImporterExtensions>
ASP.NET 2.0 WebService中传递DataTable参考            
<add name="dataTableSchemaImporterExtension" type="Xrinehart.Tools.WebService.SchemaImporter.DataTableSchemaImporterExtension, Xrinehart.Tools.WebService.SchemaImporter,Version=1.0.0.0,Culture=neutral,PublicKeyToken=5a627ce15fb94702" />
ASP.NET 2.0 WebService中传递DataTable参考    
</schemaImporterExtensions>
ASP.NET 2.0 WebService中传递DataTable参考 
</system.xml.serialization>


  完成以上的步骤后,再编译WebService,重新引用(或者更新Web引用),就可以正确的识别DataTable类型了。
  其实DataTable只实现了序列化,但WebService并不能自己反序列化为可识别的格式,所以需要自己手动增加。由此可以衍生为各种业务实体BussinessEntity类对象也可以通过以上方式实现直接传递。

  希望对大家有所帮助。

相关文章: