Tho*_*que 94 .net c# serialization constructor datacontractserializer
我刚刚意识到一些疯狂的东西,我认为这是完全不可能的:当反序列化一个对象时,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; }
}
Run Code Online (Sandbox Code Playgroud)
当我反序列化该类的对象时,不会触发断点.我完全不知道它是如何可能的,因为它是这个对象的唯一构造函数!
我假设编译器可能因为DataContract属性而生成了额外的构造函数,但我无法通过反射找到它...
所以,我想知道的是:如何在不调用构造函数的情况下创建我的类的实例?
注意:我知道OnDeserializing在反序列化开始时我可以使用该属性初始化我的对象,这不是我的问题的主题.
Mar*_*ell 130
DataContractSerializer(像BinaryFormatter)不使用任何构造函数.它将对象创建为空内存.
例如:
Type type = typeof(Customer);
object obj = System.Runtime.Serialization.
FormatterServices.GetUninitializedObject(type);
Run Code Online (Sandbox Code Playgroud)
假设反序列化过程(或必要时的回调)将完全初始化它.
| 归档时间: |
|
| 查看次数: |
15063 次 |
| 最近记录: |