我不想计算位置或抛出异常,因为这些值是相互检查和设置的( inter- NOT > ind-)。如果该值已序列化,那么我知道它是有效值,因此,如果要在反序列化过程中,我想绕过CalcNewPositions
调用。有没有办法知道我们当前是否处于反序列化模式?否则,由于尚未设置其中一个值,因此将引发异常。 (在序列化之外初始化时,我们使用_x
和_y
的两个有效值进行初始化。)
[DataContract]
Class Foo{
...
[DataMember]
public double X
{
get { return _x; }
set
{
// I WANT TO BYPASS THIS IF WE'RE MID-DESERIALIZATION
if (!CalcNewPositions(value,_y))
{
throw new ArgumentOutOfRangeException(value + " Out of Bounds: ");
}
_x = value;
_lastGoodX = value;
}
}
[DataMember]
public double Y
{
get { return _y; }
set
{
// I WANT TO BYPASS THIS IF WE'RE MID-DESERIALIZATION
if (!CalcNewPositions(_x,value))
{
throw new ArgumentOutOfRangeException(value + " Out of Bounds: ");
}
_y = value;
_lastGoodY = value;
}
}
...
}
编辑:
随着我进行更多的研究,我首先想到的是尝试使用ISerializable
设置一个字段,以后我可以检查X和Y的设置器:
[DataContract]
[Serializable]
Class Foo : ISerializable {
...
protected Foo(SerializationInfo info,StreamingContext context)
{
_deserializing = true;
}
...
}
但是我遇到了异常Type 'Foo' cannot be ISerializable and have DataContractAttribute attribute
。由于该项目目前在所有地方都使用DataContract,所以我认为我不能走那条路。