WCF 之 DataContract
在客户端与服务端之间传递的自定义数据类型,格式如下:
[DataContract] public class User :IExtensibleDataObject { [DataMember] public int ID { get; set; } [DataMember] public string Name { get; set; }
//这里没有[DataMember],则说明不被传递 public string Sex { get; set; }
//而这里无论有没有[DataMember],都会被传递 public ExtensionDataObject ExtensionData { get; set; } }
对于实现接口 IExtensibleDataObject,目的是为了保证数据不丢失。但如果客户端和服务端之间传递的DTO,能够保证版本一致,则该接口可以不实现。
实现 IExtensibleDataObject 的好处如下:
服务端返回最新版本 User :
public User GetName() { return new User { ID=1, Name="apple", Sex="M" }; }
而这时客户端的版本不是最新的,没有ID:
当客户端请求时:
private static void Main(string[] args) { UserInfoClient client = new UserInfoClient(); var user = client.GetName(); // 这时的 user 是没有ID的,因为没有更新服务,导致版本不一致 Console.ReadKey(); }
这时接口的 ExtensionData 就起作用了,它包含了ID,这样就保证了数据不丢失: