WCF 之 DataContract

本文介绍了一种在客户端和服务端间传递自定义数据类型的机制,通过实现IExtensibleDataObject接口来确保数据完整性和版本兼容性。使用示例展示了如何在不同版本的数据传输中保持一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在客户端与服务端之间传递的自定义数据类型,格式如下:

     [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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值