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,这样就保证了数据不丢失:

原文地址:https://www.cnblogs.com/yipeng-yu/p/4318109.html