.net 为什么DataContractSerializer绕过初始值设定项?

.net 为什么DataContractSerializer绕过初始值设定项?,.net,serialization,.net,Serialization,为什么DataContractSerializer绕过初始值设定项 背景: 序列化格式化程序在反序列化期间获取未初始化的类实例。也就是说,所有字段都设置为其默认值的实例。对于引用类型,这将为null。这就是为什么本例中的“authors”会导致空引用异常。您必须在属性中创建它,就像您注释掉的代码一样。通过包含作者的“惰性”初始化代码,可以删除字段初始值设定项。此外,必须更改构造函数以使用属性而不是字段direclty /卡莱 出于性能原因-使用默认的无参数构造函数反序列化和设置属性似乎相当慢-W

为什么DataContractSerializer绕过初始值设定项

背景:

序列化格式化程序在反序列化期间获取未初始化的类实例。也就是说,所有字段都设置为其默认值的实例。对于引用类型,这将为null。这就是为什么本例中的“authors”会导致空引用异常。您必须在属性中创建它,就像您注释掉的代码一样。通过包含作者的“惰性”初始化代码,可以删除字段初始值设定项。此外,必须更改构造函数以使用属性而不是字段direclty

/卡莱

出于性能原因-使用默认的无参数构造函数反序列化和设置属性似乎相当慢-WCF处理它的方式要快得多


因此,DataContractSerializer不需要无参数的公共构造函数(就像XmlSerializer一样)-您不需要它,反正也不会使用它。

我当然喜欢放弃无参数的公共构造函数要求。