using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; namespace Artech.DataContractVersioning.Service { [DataContract(Namespace="http://artech.datacontractversioning")] publicclass Order { [DataMember(Order =0)] public Guid OrderID {get;set;} [DataMember(Order =1)] public DateTime OrderDate { get; set; } [DataMember(Order =2)] public Guid SupplierID { get; set; } } }
Service Contract 和Service Implementation: Process方法简单地将Order对象返回到客户端,当Client接受到Service返回的Order对象后,可以检测和由它传递给Service的Order对象有什么不同。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace Artech.DataContractVersioning.Service { [ServiceContract] publicinterface IOrderManager { [OperationContract] Order Process(Order order); } } namespace Artech.DataContractVersioning.Service { publicclass OrderManagerService:IOrderManager { IOrderManager Members#region IOrderManager Members public Order Process(Order order) { return order; } #endregion } }
2.Client端:
Data Contract
[DataContract(Name="Order",Namespace="http://artech.datacontractversioning")] publicclass CustomOrder { [DataMember(Order =0, Name="OrderID")] public Guid OrderNo { get; set; } [DataMember(Order =2, Name ="SupplierID")] public Guid SupplierNo { get; set; } [DataMember(Order =1)] public DateTime OrderDate { get; set; } } }
namespace System.Runtime.Serialization { // Summary: // Provides a data structure to store extra data encountered by the System.Runtime.Serialization.XmlObjectSerializer // during deserialization of a type marked with the System.Runtime.Serialization.DataContractAttribute // attribute. publicinterface IExtensibleDataObject { // Summary: // Gets or sets the structure that contains extra data. // // Returns: // An System.Runtime.Serialization.ExtensionDataObject that contains data that // is not recognized as belonging to the data contract. ExtensionDataObject ExtensionData { get; set; } } }
现在我们来重新定义Service的Order Data Contract:
namespace Artech.DataContractVersioning.Service { [DataContract(Namespace="http://artech.datacontractversioning")] publicclass Order:IExtensibleDataObject { [DataMember(Order =0)] public Guid OrderID {get;set;} [DataMember(Order =1)] public DateTime OrderDate { get; set; } [DataMember(Order =2)] public Guid SupplierID { get; set; } public ExtensionDataObject ExtensionData { get; set; } } }