没有附加属性或默认公共构造函数的二进制序列化/反序列化

时间:2015-09-29 18:03:00

标签: c# .net serialization binary-serialization

我需要二进制序列化一个包含一些基类实例的集合的对象。每个实例可以是任何派生类型,并且实际上有很多可能的派生类型(大约一百个)。因此,我真的不想修改这些类型中的每一个,以便可以序列化该对象。

我甚至想避免将默认的公共构造函数添加到所有这些类型中,因为这会对架构造成一点损害并且也会非常烦人(而不是真正的DRY),而不是说将Serializable属性添加到这些类型中的每个公共属性。出于同样的原因,为这些类型中的每一种编写自定义序列化器/代理都不是一种选择。

到目前为止我尝试过:

我也尝试使用Json.NET进行序列化,然后将结果保存为字节数组(我知道,我知道),但是在序列化时我遇到了OutOfMemoryException。这可能意味着我的对象对于文本序列化来说太重了(它在内存中需要大约200Mb,但是数组中有很多元素,每个元素中有很多属性等)。

如果它做得更好 - 我需要保存的集合中的所有对象只有公共属性(我不需要序列化字段或私有属性)。并且在这些对象的构造函数中也没有特定的逻辑 - 只填充本地。

有没有办法在不修改序列化类的情况下实现序列化/反序列化?

我甚至不知道是否可以反序列化没有无参数构造函数的对象(我遇到的所有序列化程序都需要限制),但它应该是the reflection allows to create instances without calling constructors.

0 个答案:

没有答案