Я написал 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);
}
}