Как заставить контракты кода работать с десериализацией контрактов данных?

Я написал 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);
 }
}
7
задан Arash 7 August 2011 в 12:17
поделиться