Ara*_*ash 7 .net wcf datacontract code-contracts
我已经写了ContractInvariantMethod一个数据契约类,一切都在客户端很好,但是当这种类型的对象被发送到我的服务,并且数据协定反序列化器试图反序列化它时,代码合同检查会妨碍我抛出ContractException,说不变失败.原因是在类的(默认)构造函数中,我设置属性以满足不变量,但显然在反序列化对象时不会调用构造函数.这个问题有方法解决吗?
这是我的数据合同类:
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
在运行时检查期间,会在每个公共方法的末尾检查不变量.
因此,当Serializer将Property1和Property2设置为-1时,您会收到合同异常,因为反序列化器不使用构造函数.
所以使用这个:
public DataContractClass()
{
SetDefaults();
}
[OnDeserializing]
private void OnDeserializing(StreamingContext context)
{
SetDefaults();
}
private void SetDefaults()
{
Property1 = -1;
Property2 = -1;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |