【发布时间】:2010-11-07 18:48:51
【问题描述】:
我刚刚意识到一些疯狂的事情,我认为这是完全不可能的:反序列化对象时,DataContractSerializer 不会调用构造函数!
以这门课为例:
[DataContract]
public class Book
{
public Book()
{ // breakpoint here
}
[DataMember(Order = 0)]
public string Title { get; set; }
[DataMember(Order = 1)]
public string Author { get; set; }
[DataMember(Order = 2)]
public string Summary { get; set; }
}
当我反序列化该类的对象时,没有命中断点。我完全不知道这怎么可能,因为它是这个对象的唯一构造函数!
我假设编译器可能因为DataContract属性而生成了一个额外的构造函数,但我无法通过反射找到它...
那么,我想知道的是:如何在不调用构造函数的情况下创建我的类的实例??
注意:我知道我可以在反序列化开始时使用OnDeserializing 属性来初始化我的对象,这不是我的问题。
【问题讨论】:
-
或“OnDeserialized”,当对象完成反序列化后,填写缺失的字段。
-
我也想到了这个问题:stackoverflow.com/questions/178645/…
标签: c# .net constructor serialization datacontractserializer