是否可以反序列化C#中的对象,该对象已在C ++ MFC中进行二进制序列化?

时间:2016-05-27 07:43:52

标签: c# c++ serialization mfc binary

该对象已使用CObject::Serialize()方法在C ++ MFC中序列化。

我想在C#中反序列化。

这可能吗?

2 个答案:

答案 0 :(得分:2)

是的,它可能......

但是,你是否想要这样做是另一回事。 MFC序列化格式面向MFC框架。它将MFC类的名称编码为序列化数据,您必须尝试为其找到等效的C ++类。

您最好的选择是使用与语言无关的序列化格式并使用它来序列化您的数据。 JSON,XML或Protobuf非常适合这种情况。

答案 1 :(得分:1)

  

这可能吗?

简短回答:不。

MFC的反序列化在非托管堆上生成非托管对象,并且需要访问相应的类' CRuntimeClass,以及框架的全局结构映射类名到工厂方法。特别是后者无法从C#访问。

您可以做的是读取序列化二进制流,并重新构建要存储在托管对象中的信息。二进制文件格式记录在TN002: Persistent Object Data Format 1)下。这将不允许您将这些托管对象序列化回MFC兼容的二进制流(除非您在托管类中重新实现文件格式)。

<小时/> 1) 注意:序列化流中每个对象的二进制表示在其类中编码。 CObject::Serialize覆盖。了解整体文件格式不足以反序列化MFC序列化流。您还需要知道每个对象的序列化代码。