为什么在WCF反序列化器初始化对象时不调用我的抽象基类的构造函数?

Kri*_*erA 7 c# wcf serialization

标题中的问题...简而言之 - 我有一个WCF服务公开返回实体类的操作.客户端类继承自抽象基类而不是默认的System.Object.抽象基类定义了默认构造函数.当调用其中一个服务方法时,我希望在datacontract序列化器实现返回的对象时调用构造函数.但是,不会调用构造函数.另一方面,如果我自己创建实体类的实例,则调用抽象类构造函数.

为什么,为什么,是否有解决方法?或者我错过了什么 - 是否有另一个构造函数签名由datacontract序列化程序在实现对象时调用?如果没有,datacontract序列化程序如何在不调用构造函数的情况下实现对象,就像"new SomeClass()"调用一样?或者我今天喝了太多咖啡(到目前为止只有2或3杯)?

Mar*_*ell 11

WCF(DataContractSerializer特别是)不使用构造函数.不,真的(它用于FormatterServices.GetUninitializedObject创建原始对象).

预计所有数据都将由序列化程序初始化,或者由非序列化字段初始化 - 通过您添加的序列化回调(例如,通过[OnDeserialized]).

  • 构造函数可能做不合适的事情.他们通过任何类型的反序列化来实现目标,不是"创建一个新对象",而是"让旧对象回归".为此,您可能需要主动避免使用构造函数. (3认同)