我最近开始学习Reflection.Emit,所以我可以替换所有Activator用法,以便在我的代码中获得更好的性能。我现在正在考虑某种序列化和反序列化库。特别是对于反序列化,我想重新创建与序列化之前完全相同的对象状态(我假设序列化是100%正确的)。但是,例如可以有类,有多个构造函数,每个都做一些复杂的事情,因为这个对象有复杂的逻辑,必须以某种特定的方式进行初始化。但是当我序列化关于对象的所有内容时,我能做的最简单的事情是以某种方式绕过任何提供的ctors - 只需创建一个空对象并用数据填充所有字段。周期。
不幸的是,在OpCodes.Newobj
中使用ILGenerator.Emit
需要传递ConstructorInfo
作为参数。对于结构,它很容易,因为它们总是具有默认的无参数ctor。然而,课程的不同之处在于。
我将不胜感激。
答案 0 :(得分:3)
必须可以,因为BinaryFormatter在不调用构造函数的情况下创建对象。
您可以使用FormatterServices.GetSafeUninitializedObject
。这可能受到最高安全要求的保护。