gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:06:32 26 4
gpt4 key购买 nike

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

为什么,哦,为什么,有解决方法吗?还是我错过了什么——在具体化对象时是否有另一个构造函数签名被数据契约(Contract)序列化程序调用?如果不是,datacontract 序列化程序如何在不调用构造函数的情况下实现对象,就像“new SomeClass()”调用一样?还是我今天喝了太多咖啡(到目前为止只喝了 2 或 3 杯)?

最佳答案

WCF(尤其是 DataContractSerializer)不使用构造函数。不,真的(它使用 FormatterServices.GetUninitializedObject 来创建原始对象)。

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

关于c# - 为什么在 WCF 反序列化程序初始化对象时不调用抽象基类的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com