有没有办法在类的构造函数中确定是否正在反序列化实例?

时间:2010-08-23 10:20:29

标签: c# asp.net serialization

假设我有商务舱:

public class Foo
{
   public int Prop1 {get;set;}
   public int Prop2 {get;set;}

   public Foo(int prop1, int prop2)
   {
      this.Prop1 = prop1;
      this.Prop2 = prop2;
   }

   public Foo()
   {
     throw new NotImplementedException();
   }
}

只有在设置了两个属性时,业务类才有效。因此,我可以确保实现无参数构造函数,并在有人尝试使用无参数构造函数实例化类时抛出NotImplementedException。

但现在我希望能够序列化/反序列化我的课程。对于deserilization过程,我需要默认的构造函数,它不再抛出NotImplementedExeption。

有没有办法找出是否使用默认构造函数创建了我的类的实例,或者是否正在反序列化该对象?

假设我没有两个属性的有效默认值。

我怎样才能解决这种情况?

3 个答案:

答案 0 :(得分:0)

使用protected modifier隐藏默认构造函数。

Read More

答案 1 :(得分:0)

二进制反序列化不会调用任何构造函数,AFAIK。

答案 2 :(得分:0)

如果你实现了ISerializable,那么你将通过你需要使用的构造函数来进行反序列化。

如果您实现IXmlSerializable并且序列化是通过XmlSerialization进行的,那么您将通过该接口定义的ReadXml方法进行反序列化。

如果您实施IDeserializationCallback,那么在构建对象之后,您将实现名为OnDeserialization。这对你的目的来说可能为时已晚,但如果足够的话,那么它可能最容易添加到已经存在的类中。