首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WCF技术剖析之十四:数据契约和集合数据契约(上篇)

.NET Framework 2.0第一次被引入。我们可以定义接口、类型、委托和方法。序列化依赖于真实具体的类型,而则刻意模糊了具体类型概念。...由于范类型和集合类型序列化和反序列化上具有一些特殊的行为和规则,在这篇文章,我将会对此进行详细介绍。上篇先来说所数据契约。...真正创建对象或者调用该方法的时候,才指定其具体的类型。 就实现来说,是CLR和编程语言(或者是基于编程语言的编译器)共同实现的一种特殊机制;就的概念来说,这是面向对象的范畴。...、Unity之间的集成 WCF技术剖析之八:ClientBase对ChannelFactory的缓存机制 WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?...(上篇) WCF技术剖析之十四:数据契约和集合数据契约(下篇) WCF技术剖析之十五:数据契约代理(DataContractSurrogate)序列化的作用 WCF技术剖析之十六:数据契约的等效性和版本控制

1.2K90

WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)

对于服务契约来说,我们一个接口或者上面应用的ServiceContractAttribute将其定义成服务契约后,并不意味着该接口或者的每一个方法成员都是服务操作,而是通过OperationContractAttribute...我们照例定义一个的辅助方法进行专门的序列化工作,最终生成的XML保存到一个XML文件。...(比如TotalPrice属性的值不会出现在序列化后的XML); 所有数据成员均以XML元素的形式被序列化; 序列化后数据成员XML的次序采用这样的规则:父数据成员在先,子类数据成员在后...在这里需要对上面定义的辅助的Serialize方法作相应的修正,加入preserveObjectReferences参数,并通过该参数创建相应的DataContractSerializer对象...需要注意的是Customer定义了两个属性:CompanyAddress和ShipAddress,它们的类型均为Address。

1.6K90
您找到你想要的搜索结果了吗?
是的
没有找到

WCF技术剖析之十三:序列化过程的已知类型(Known Type)

当我们使用基于接口或者抽象创建的DataContractSerializer去序列化一个实现了该接口或者继承该抽象的实例的时候,往往会因为对对象的真实类型无法识别造成不能正常地序列化。...比如下面的代码,我们定义了3个类型,一个接口、一个抽象和一个具体。...] 42: public double TotalPrice 43: { get; set; } 44: } 45: } 当我们通过下面的方式去序列化一个Order对象(注意类型为IOrder...在下面的代码调用Serialize的时候,将类型分别设定为接口IOrder和抽象OrderBase。虽然是对同一个Order对象进行序列化,但是序列化生成的XML却各有不同。...下面的代码OrderBase指定了子类的类型Order。

955110

C++反射调用.NET(三) 使用非集合的委托方法C++的列表对象list C++传递集合数据给.NET创建List实例反射静态方法反射调用索引器当委托遇到协变和逆变C++CLI

使用非集合的委托方法 先看看.NET的一个返回列表数据的方法: //返回List或者数组,不影响 C++调用 public List GetUsers(string...,好在IEnumerable也是继承 IEnumerable 的,所以可以当做非对象C++访问,因此创建上面的委托方法是可行的。...创建List实例 我们使用List来做集合对象,C#,我们可以通过下面的方式得到List的类型,然后进一步创建对象实例: Type t= typeof(List); 但是,对应的C+...为什么要反射创建实体? 因为CreateGenericList(interfaceType) 创建的是一个List对象,要求它的成员是一个实体。...一切准备就绪,下面可以通过以下步骤提交集合数据给.NET方法了: 1,反射.NET方法,获取参数的形参类型; 2,创建形参的List对象实例; 3,遍历C++集合(列表list),将结构数据赋值给动态创建的实体对象

9K100

SilverLight企业应用框架设计【四】实体层设计+为客户端动态生成服务代理(自己实现RiaService)

]标记 是为了客户端与服务端传输数据的时候序列化与反序列化引入的 2: MenuM继承自Entity 然而在.net 3.5是没有Entity的 那么我们就创建了这个(就是Attr文件夹下的...菜单名称")] 如上:Display特性dotNet3.5也是不存在的 同理,我们创建了DisplayAttribute特性,也是为了使用Silverlight4.0的客户端特性 namespace...获取服务端信息使用了反射 我们反射出的名字,的方法名,参数名,参数类型,返回值类型等 来生成形如下面这样的服务端代理 public class MenuService {..., 会遇到获取类型的情况(如:List~<…....if (t.Name.StartsWith("List")) { var gtype = t.GetGenericArguments().FirstOrDefault

72030

ExtJs+WCF+LINQ实现分页Grid

第一步:vs2008创建一个支持.Net Framework 3.5,名称为:ExtJs_Wcf_Linq_PageGrid的Asp.Net网站, ?...在这个步骤,主要目的是项目创建一个Lint to Xml,这个用于Linq与数据表Product进行交互。使用Linq To Sql可以产生一个实体和一个数据访问。...、 拖动成功之后,便有vs2008的IDE自动生成了有关Product的实体和linq操作数据表Product的操作:ProductsDataContext,可视化界面也能有如下的显示: ?...设计一个用于与ExtJs进行分页交互的PageData: using System;  using System.Data;  using System.Configuration;  using...  get;  set;  }  }  } 这个用于WCF与ExtJS的Grid控件交互,T是返回的具体数据类型的集合,TotalRecord是总记录数。

1.9K70

Asp.Net Web API 2第十三课——ASP.NET Web API的JSON和XML序列化

只读属性不作序列化 名和成员名按声明的确切呈现写入XML 使用XML的默认命名空间 如果需要在序列化上的更多控制,可以用DataContract注解属性修饰。...要改变XML的呈现,请在DataContract注解属性设置Name参数。 要改变成员名XML的呈现,请设置DataMember注解属性的Nmae参数。...要改变XML命名空间,请设置DataContract的Namespace参数。 Read-Only Properties——只读属性 只读属性是不被序列化的。...如果只读属性有一个支撑private字段,可以用DataMember注解属性对这个private字段进行标记。这种办法需要在上使用DataContract注解属性。...; xml.Indent = true; 设置每一(Per-Type)的XML序列化器 你可以为不同的CLR类型设置不同的XML序列化器。

2.1K30

框架设计原则和规范(四)

对非接口IEnumerator和Enumerable来说也同样如此 类型要么应该是集合,要么应该是个枚举器,但不能两者都是。 6) 集合参数 A.要用最的类型来作为参数类型。...要用ReadOnlyCollection或其子类,少数情况下用IEnumerable,如果属性或返回值表示只读属性 D.考虑使用集合基的子类,而不要直接使用该集合 自定义的集合类型可以有更好的命名...考虑实现非集合(IList/ICollection)接口——如果经常需要把集合传给以这些参数为输入的API。...class OrderCollection :ILIst, IList { ... } C.避免为类型实现集合接口——如果类型的API很复杂,而且与集合的概念无关 D.不要继承自非的集合基...考虑覆盖Object.Equals方法的同时实现IEquatable接口 D.不要从Equals方法抛出异常 E.

1.4K40

Thinking In Design Pattern——探索SOA企业应用程序扮演的角色

DataContract的设计与实现 DataContract项目存放着服务工作流涉及的所有DTO对象,因为将使用WCF模型来暴露服务,所以添加相关的特性(Attribute)来修饰属性进行序列化。...public class MessageResponseHistory { //将与给定关联标识符的服务响应结果存放在内存,可能没有必要保存每一条的结果,因此可以处理只缓存最近...如果找到匹配响应则从MessageResponseHistory对象检索出响应返回给客户端,以确保客户端重复调用该服务时不会出现预料之外的问题。...purchaseTicketRequest); } } TicketServiceClientProxy继承自ClientBase,Visual Studio自动替我们创建代理服务时正是使用该基...我们将创建一个门面,把与服务通信的复杂读隐藏起来(只提供简单API),并让客户端应用与服务松散耦合,从而有助于测试。这个服务门面将使用两个特定的Presentation模型

92550

WCF技术剖析之十五:数据契约代理(DataContractSurrogate)序列化的作用

GetDataContractType,如果发现类型是Contact,则替换成Customer。...,创建了Serialize和Deserialize两个辅助方法,通过创建DataContractSerializer进行序列化和反序列化。...WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理 WCF技术剖析之十一:异步操作WCF的应用(上篇) WCF技术剖析之十一:异步操作WCF的应用(下篇) WCF技术剖析之十二:数据契约...(Data Contract)和数据契约序列化器(DataContractSerializer) WCF技术剖析之十三:序列化过程的已知类型(Known Type) WCF技术剖析之十四:数据契约和集合数据契约...(上篇) WCF技术剖析之十四:数据契约和集合数据契约(下篇) WCF技术剖析之十五:数据契约代理(DataContractSurrogate)序列化的作用 WCF技术剖析之十六:数据契约的等效性和版本控制

80680

第08天Java机制

也就是说使用过程,操作的数据类型被指定为一个参数,这种参数类型可以用在、接口和方法,分别被称为接口、方法。...创建 List 集合时,同样使用了,因此获取集合的元素时也不需要将 bookList.get(i) 代码强制转换为 Book 类型,程序会隐式转换。...Java 支持声明一个以上的类型参数,只需要将类型用逗号隔开即可。 一般用于属性类型不确定的情况下。...实例化时,需要指明的类型参数,并赋予属性相应类型的值。例如,下面的示例代码创建了一个表示学生的,该类包括 3 个属性,分别是姓名、年龄和性别。...测试调用 Stu 的构造方法实例化 Stu 对象,并给该类的 3 个属性赋予初始值,最终需要输出学生信息。

16130

谈谈WCF的Data Contract(2):WCF Data Contract对Generic的支持

.NET,基于Primary Type,比如Int32,String等等,他们具有一个简单的默认的序列化方式和结构,可以说他们不需要Data Contract。...所以WCF需要为此提供这样的机制:基于不同的类型参数生成不同Data Contract Name,这样才能解决命名冲突。...> DetailList         { get; set; } } 其中{0}和{1}分别代表第一个类型参数和第二个类型参数的名称,一次类推,你可以根据参数类型的个数设置{2}{3}… 这样我们生成的两个...但是这并没有根本解决问题,如果在我现在不同的Namespace创建了两个OrderHeader和OrderDetail呢?...这无疑.NET是合法的,但是对于DataContract有有可能出现命名冲突。 这也就是为什么WCF默认机制下会为Data Contract Name添加一个额外hash value的原因。

76170

Java详解

的作用是:可以声明时通过一个标识表示某个属性的类型,或者法的返回值的类型,或者是参数类型。...静态方法不能使用,因为静态是与相关的,因此类的加载时对象还没有创建,因此无法指定静态方法/变量的类型。如果静态方法和静态属性使用了,JVM就无法完成初始化。...静态方法不能使用 class Tiger { String name; R r; //属性使用到 M m; T t; //因为数组...= r; this.m = m; this.t = t; } //因为静态是和相关的,加载时,对象还没有创建 //所以,如果静态方法和静态属性使用了...(参数列表){} 注意细节 方法,可以定义普通,也可以定义方法被调用时,类型会确定 public void eat(E e) {}.修 饰符后没有 <T,R…

44420

一文打通java

Collection,List,ArrayList 这个就是类型参数,即 的概念 所谓,就是允许定义、接口时通过一个标识表示某个属性 或者是某个方法的返回值及参数类型。...JDK1.5改写了集合框架的全部接口和,为这些接口、增加了支持, 从而可以声明集合变量、创建集合对象时传入类型实参。 那么为什么要有呢,直接Object不是也可以存储数据吗?...的指定不能使用基本数据类型,可以使用包装替换。 9. /接口上声明的本类或本接口中即代表某种类型,可以作为非静态 属性的类型、非静态方法的参数类型、非静态方法的返回值类型。... 方法可以定义参数,此时,参数的类型就是传入数据的类型。  ...:实际案例   用户设计的时候往往会使用的关联关系,例如,一个人中可以定义一个信息 的属性,但是一个人可能有各种各样的信息(如联系方式、基本信息等),所以此信 息属性的类型就可以通过进行声明,

14330

C#2.0新增功能02

public class Generic { public T Field; } 创建的实例时,指定用于替代类型形参的实际类型。...(大多数情况下,应使用 .NET Framework 库提供的 List ,而不是自行创建。)通常使用具体类型来指示列表中所存储项的类型的情况下,可使用类型参数 T。...其使用方法如下: AddHead 方法作为方法参数的类型。 Node 嵌套作为 Data 属性的返回类型。 嵌套作为私有成员 data 的类型。...概述 使用类型可以最大限度地重用代码、保护类型安全性以及提高性能。 最常见的用途是创建集合。...应尽可能使用这些来代替某些,如 System.Collections 命名空间中的 ArrayList。 可以创建自己的接口、方法、事件和委托。

68050

的深入研究——面试时说出能加分

我们可以定义集合时设置这样的约束,也可以定义和方法时加上,这样能提升和方法的灵活性。此外我们还可以定义时加上继承和通配符。...平时的培训,我曾发现初学者对一些复杂的(其实也不复杂,只不过是较少用)感到困惑。这里就通过一些案例展示项目里的常见用法。...().toString());} 21 } 22 } 第3行定义WareHourse这个时,我们加上了约束T,而在这个属性和方法里,我们又多处用到了这个T。...比如,第4行里通过T创建一个含约束的List第13行添加元素的方法里,参数是T第16行打印所有对象的printAllItems方法里,我们第18行创建迭代器时,也用到了T。...第50行里,我们指定了类型是自定义的Item;如是,第51和52行调用addItem方法时,传入的参数就需要是Item类型了。 在这个例子,我们把作用到上。

43730

基础篇:深入解析JAVA

(type parameter)这种参数类型可以用在、接口和方法的创建中,分别称为接口、方法 : 把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型 3 方法的示例...T printData(T t){ System.out.println(t); return t; } } 接口和抽象都可以使用 4 类型擦除 创建的实例时...;或者属性定义A,并使用A的参数T时,其参数都会被编译器定为变量TypeVariable,而不是被擦除 public class MainTest {...= List.class编译时不通过的;还有就是直接通过new创建的对象,其Class并非ParameterizedType类型,而是本身的class,示例如下 public...) // 2 获取内部定义的属性,需指定具体参数 // 3 局部代码,可以通过的匿名内部子类(需指定具体参数)获取ParameterizedType类型 public class MainTest

1.3K20
领券