WCF笔记--泛型与集合数据类型

简介:

刚参加完上司的婚礼,感觉很不错,,婚礼现场像童话一般,,不知道是不是很多女生都憧憬着这样的一天    WCF笔记--泛型与集合数据类型 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝

还是记录一下,学习所得


数据契约

  首先是数据契约,可能包括有[DataContract] [DataMember] ,甚至各样的操作,

  其次就是已知类型,[ServiceKnownType] [KnownType] 比较简单不是这篇的重点


泛型数据类型

   然后就是

   在.NET Framework 2.0中,泛型第一次被引入。我们可以定义泛型接口、泛型类型、泛型委托和泛型方法。序列化依赖于真实具体的类型,而泛型则刻意模糊了具体类型概念。而集合代表一组对象的组合,集合具有可迭代(Enumerable)的特性,可以通过某个迭代规则遍历集合中的每一个元素。范型类型和集合类型在序列化和反序列化上具有一些特殊的行为和规则,我们继续下去


  1. 首先定义泛型中需要的数据契约

1
2
3
4
5
6
[DataContract]
public  class  Student
{
     [DataMember]
     public  string  Name { get set ;}
}    //... 可能还有其他类型

  2. 定义泛型类型

1
2
3
4
5
6
[DataContract]
public  class  School<Student>
{
      [DataMember]
      public  Student stu { get set ;}
}

  3. 实例化这个泛型对象

  略...

  4. 序列化泛型对象

  Serialize<School<Student>>(实例化后的泛型对象, @"school.xml");

  之后我们会发现 SchoolOfStudentjOfvLqKh 开头的XML节点,让人匪夷所思,仔细发现

  会发现它的组成结构是这样的:{类型名称(School)}+ Of + {范型参数的类型(Student)} }+ {哈希值(jOfvLqKh)}

  就算我们修改数据契约的名称会发现哈希散列值依旧没有任何变化,其实这是ms为了防止命名冲突而为,

  切记不要在2步骤将name设死,不过我们可以这样做 DataContract(Name="SchoolOf{0}{#}")]

  这样元数据发布时我们就可以使用到属于自己定义的泛型类型了..


集合数据类型

在.NET中,所有的集合都实现了IEnumerable接口,比如Array、Hashtable、ArrayList

定义与服务端使用就略过了,,

关键要记住 DataContractSerializer对于IEnumerable<T>、Array与IList<T>序列化的结果XML是完全一致的,根节点的名称以ArrayOf为前缀,后面紧跟集合元素类型对应的数据契约名称,那么我们的客户端在使用时都是Student[],这可怎么办?

这个时候千万不要忘记了我们身边的"神器"IDE了

WCF笔记--泛型与集合数据类型 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝

这样我们就可以在客户端舒舒服服的用这样的类型了,当然其他的一些在客户端生成object[]的,就需要已知类型的参与了  WCF笔记--泛型与集合数据类型 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝

最后就是自定义集合类型了

[CollectionDataContract],

注意三点

   1,集合必须是可序列化的,

   2 这个可不是我们SOA中的DataContract了,

   3 要有Add方法的支持



     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360556,如需转载请自行联系原作者



相关文章
WCF基础教程(四)——数据契约实现传送自定义数据类型
WCF基础教程(四)——数据契约实现传送自定义数据类型
125 0
|
安全 编译器 Windows
|
算法 .NET
WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
原文:WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]在.NET Framework 2.0中,泛型第一次被引入。
1120 0
WCF 笔记 (2) - 传输泛型 List 对象
在做邮件服务的时候遇到一个问题: 服务器端有个方法参数是个List 类型。当在客户端传参数的时候 ,你即使传个List类型的参数,也还是提示参数类型错误。 相关解决方法:http://www.cnblogs.com/wizardwu/archive/2009/08/09/1542102.html
793 0
arcgis开发笔记【silverlight同步访问WCF和网站数据】
SL调用WCF方法,默认是异步的,但有些情况,我们使用同步会来的方便些,下面的文章提供了一种方式。 http://www.codeproject.com/KB/silverlight/SynchronousSilverlight.
754 0
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一