问题描述
DataContract的Name和Namespace属性有什么用?特别是在序列化和反序列化时有什么用?例子:Server端得定义:namespaceDerivativeCalculatorService{[DataContract(Name="MyServiceDataContractName",Namespace="MyNamespace")]publicclassSeriveViewOfData{[DataMember(Name="Prop1")]publicstring[]Prop1{get;set;}[DataMember(Name="Prop2")]publicdecimal[]Prop2{get;set;}[DataMember(Name="Value")]publicdecimalValue{get;set;}}[ServiceContract(Name="DerivativesCalculator")]publicinterfaceIServiceViewOfService{[OperationContract]SeriveViewOfDataCalculatorDerivative(SeriveViewOfDatainput);}publicclassServiceViewOfServiceType:IServiceViewOfService{publicSeriveViewOfDataCalculatorDerivative(SeriveViewOfDatainput){input.Value+=1;returninput;}}}Client的定义:namespaceDarivativeCalculatorClient{[DataContract(Name="Test",Namespace="MyNamespace")]publicclassClientViewOfData{[DataMember(Name="Prop1")]publicstring[]Prop1{get;set;}[DataMember(Name="PropTest")]publicdecimal[]Prop2{get;set;}[DataMember(Name="Value")]publicdecimalValue{get;set;}}[ServiceContract(Name="DerivativesCalculator")]publicinterfaceIClientViewOfService{[OperationContract]ClientViewOfDataCalculatorDerivative(ClientViewOfDatainput);}}Main函数:publicstaticvoidMain(string[]args){stringaddress="http://localhost:8000/Derivatives/Calculator";ChannelFactory<IClientViewOfService>factory=newChannelFactory<IClientViewOfService>(newBasicHttpBinding(),newEndpointAddress(newUri(address)));IClientViewOfServiceproxy=factory.CreateChannel();ClientViewOfDataviewOfData=newClientViewOfData(){Prop1=newstring[]{"MSFT"},Prop2=newdecimal[]{5}};ClientViewOfDataresult=proxy.CalculatorDerivative(viewOfData);Console.WriteLine("Valueis{0}",result.Value);Console.ReadLine();((IChannel)proxy).Close();}可以发现,Client端DataContract:ClientViewOfData的Prop2的DataMember的名称和Server端的不一致,所以,发现server端ServiceViewOfServiceType的CalculatorDerivative方法中,input参数的Prop2=null,这个比较好理解。但是,为什么Client端和Server端DataContractname定义不一致时,这个还是可以正常调用的呢?Client端DataContract:ClientViewOfData的Name="Test"Server端DataContract:SeriveViewOfData的Name="MyServiceDataContractName"是不是,在反序列化的时候,只需要client传过来的xml中的namespace和Server端OperationContract中参数类型,就可以成功反序列化了???
解决方案
本帖最后由 lyso2008 于 2011-05-10 00:45:00 编辑
解决方案二:
ding!!!