gpt4 book ai didi

.net - 如何使代码合约与数据合约的反序列化一起工作?

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

我写了一个ContractInvariantMethod对于数据协定类,在客户端一切正常,但是当这种类型的对象被发送到我的服务,并且数据协定反序列化器尝试反序列化它时,代码协定检查会妨碍并抛出 ContractException ,说不变量失败。
原因是在类的(默认)构造函数中,我将属性设置为满足不变量,但显然在反序列化对象时构造函数不会被调用。
有针对这个的解决方法吗?

这是我的数据契约(Contract)类:

[DataContract]
public class DataContractClass
{
public DataContractClass()
{
this.Field1= this.Field2= -1;
}
[DataMember]
public int Field1 {get; set;}
[DataMember]
public int Field2 {get; set;}

[ContractInvariantMethod]
private void Invariants()
{
Contract.Invariant(this.Field1== -1 || this.Field2== -1);
}
}

最佳答案

在运行时检查期间,不变量是
在每个公共(public)方法的末尾检查。

因此,当序列化器将 Property1 和 Property2 设置为 -1 时,您会得到一个契约(Contract)异常,因为反序列化器不使用构造函数。

所以使用这个:

public DataContractClass()
{
SetDefaults();
}

[OnDeserializing]
private void OnDeserializing(StreamingContext context)
{
SetDefaults();
}

private void SetDefaults()
{
Property1 = -1;
Property2 = -1;
}

关于.net - 如何使代码合约与数据合约的反序列化一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972388/

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