gpt4 book ai didi

.net - DataContractSerializer:为什么不删除成员?

转载 作者:行者123 更新时间:2023-12-04 20:25:56 25 4
gpt4 key购买 nike

我正在阅读微软的 Best Practices: Data Contract Versioning ,他们说:

Do not remove data members in later versions, even if the IsRequired property was left at its default property of false in prior versions.



任何人都可以提出任何理由吗?他们没有详细说明。由于他们说在更高版本中添加数据成员没有问题,因此删除似乎也很好 - 实际上,旧版本会将其视为添加。

我想,不同之处在于您应该在最后添加新成员(使用 DataMemberAttribute 上的 Order 属性),而被删除的属性可能不会在最后。但是他们也说在加载过程中丢失的成员将保留其默认值,因此很明显丢失的成员是可以的。

我错过了什么?如果我废弃了我的产品的一个功能并删除了它的 [DataMember] 属性,我会导致什么版本互操作问题(向前兼容和向后兼容)?

另外,如果我决定我对向前兼容性不感兴趣(即,如果我不担心旧版本打开新文件),那么任何此类问题仍然适用吗?

最佳答案

仅仅是因为外部服务消费者可能会提供/使用该数据(它们是在您删除某些成员之前创建的)。如果您更改了服务方法签名,DataContractSerializer将无法识别 DataContract不再,因为未知的数据成员。

所以如果你的服务消费者都是已知的,你可以很容易地随意操作数据成员,只要你:

  • 不要破坏消费者或
  • 正确通知他们更改
  • 关于.net - DataContractSerializer:为什么不删除成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857486/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com