为什么不需要使用ServiceStack json Serializer从json字符串反序列化的对象的构造函数

本文关键字:json 字符串 构造函数 反序列化 对象 Serializer 不需要 ServiceStack 为什么 | 更新日期: 2023-09-27 18:24:59

我想知道为什么不需要构造函数将json字符串反序列化为.Net/C#类对象实例。我很惊讶构造函数根本没有被调用,并将其删除,反序列化器仍然从json字符串中创建了一个对象实例。这正常吗?

(我使用ServiceStack的json序列化程序)

为什么不需要使用ServiceStack json Serializer从json字符串反序列化的对象的构造函数

Germanns的答案并不完全正确。可以在不执行任何构造函数的情况下实例化没有默认构造函数的对象。

这是用FormatterServices.GetUninitializedObject完成的。

如果ServiceStack找不到默认构造函数,它将使用此方法,因此它可以反序列化没有默认构造函数的对象。

如果未指定构造函数,编译器将创建默认(无参数)构造函数。当且仅当不存在构造函数时,编译器才会执行操作。如果在类中创建ANY构造函数,则此编译器行为将不再适用。(试着创建一个至少有一个参数的构造函数,看看会发生什么)

反序列化将涉及两个步骤——使用默认(无参数)构造函数创建空对象,然后设置所有值。如果您的类没有默认(无参数)构造函数(由您自己显式创建或由编译器创建),则反序列化将失败。

反序列化从不使用参数化构造函数,因为它不可能猜测要使用的正确构造函数。示例:反序列化无法区分Constructor(String parameter1)Constructor(String parameter2)