如何在不破坏向后兼容性的情况下更改 DataContract 属性的类型?

Posted

技术标签:

【中文标题】如何在不破坏向后兼容性的情况下更改 DataContract 属性的类型?【英文标题】:How to change the Type of DataContract property without breaking backwards compatibility? 【发布时间】:2019-08-29 04:11:45 【问题描述】:

我正在使用 DataContract 序列化,我不想更改 Datamember 属性的类型

[DataContract]
public class Page

    [DataMember]
    public int Heightget;set;

现在我不想将 Height 属性的类型从“int”更改为“double”。 但是,我不想确保如果我打开一个旧文件,文件中的值会被使用并正确分配给“高度”,即 int 类型的值被转换为 double。

我想这样做而不必保留任何多余的属性。 有什么办法可以做到这一点?

【问题讨论】:

int 反序列化为double 应该没有任何问题。您可以尝试编写一个简单的应用程序来测试它。 【参考方案1】:

Data Contract Versioning

以下更改总是中断

...

更改数据成员的数据合同。例如,将数据成员的类型从整数更改为字符串,或者从类型 将名为“客户”的数据合约转换为具有数据合约的类型 命名为“人”。

所以不,你不能这样做,这违反了合同。

您将需要以某种方式剪切和运行。您可能需要处理旧合同。

【讨论】:

以上是关于如何在不破坏向后兼容性的情况下更改 DataContract 属性的类型?的主要内容,如果未能解决你的问题,请参考以下文章

什么是对 WSDL 契约的非破坏性或向后兼容的更改?

向接口引入默认方法真的可以保持向后兼容性吗?

在不破坏保留元素的情况下更改向量的大小

如何在不破坏 Subversion 历史的情况下重命名 Java 包?

在不破坏旧 URL 的情况下更改 wordpress 中的 URL 方案

如何在不更改后端的情况下解决 Angular 8 中的 CORS 问题?