我需要二进制序列化一个包含一些基类实例的集合的对象。每个实例可以是任何派生类型,并且实际上有很多可能的派生类型(大约一百个)。因此,我真的不想修改这些类型中的每一个,以便可以序列化该对象。
我甚至想避免将默认的公共构造函数添加到所有这些类型中,因为这会对架构造成一点损害并且也会非常烦人(而不是真正的DRY),而不是说将Serializable
属性添加到这些类型中的每个公共属性。出于同样的原因,为这些类型中的每一种编写自定义序列化器/代理都不是一种选择。
到目前为止我尝试过:
我也尝试使用Json.NET进行序列化,然后将结果保存为字节数组(我知道,我知道),但是在序列化时我遇到了OutOfMemoryException
。这可能意味着我的对象对于文本序列化来说太重了(它在内存中需要大约200Mb,但是数组中有很多元素,每个元素中有很多属性等)。
如果它做得更好 - 我需要保存的集合中的所有对象只有公共属性(我不需要序列化字段或私有属性)。并且在这些对象的构造函数中也没有特定的逻辑 - 只填充本地。
有没有办法在不修改序列化类的情况下实现序列化/反序列化?
我甚至不知道是否可以反序列化没有无参数构造函数的对象(我遇到的所有序列化程序都需要限制),但它应该是the reflection allows to create instances without calling constructors.