反序列化时猜测对象类型

时间:2011-03-22 15:39:07

标签: c#

我有一些序列化的对象 [编辑:使用BinaryFormatter] 这样

Obj_A 1    
Obj_A 2
Obj_A 3
Obj_B 1
Obj_B 2
Obj_B 3
Obj_B 4

用户在运行时决定B之前有多少个A对象。

在反序列化时,我无法猜测何时将形式Obj_A deseriliazing切换为Obj_B

我欢迎任何相关见解

编辑:序列化发生在流程上,A和B的数量事先不知道

ANSWER
Marc Gravell提出了一些我不知道的事情:
为什么要打扰?然后让格式化程序完成工作并测试类型 (我很惊讶我这里的人并没有大声回答,显而易见......)

IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("X:\\binary.dump", FileMode.Open);
object o = formatter.Deserialize(stream);

if (o.GetType() == typeof(Obj_A))
     ReadTheMSDN(Obj_A);

else if (o.GetType() == typeof(Obj_B))
     KnowObjectsYouHandle(Obj_B);

stream.Close();

另一个不太优雅的解决方案是强制对象列表:

LIST Obj_A
    Obj_A 1    
    Obj_A 2
    Obj_A 3

LIST Obj_B
    Obj_B 1
    Obj_B 2
    Obj_B 3
    Obj_B 4

1 个答案:

答案 0 :(得分:2)

您使用的序列号是什么?各种选择

  • 使用为您处理此问题的序列化程序
  • 在每个之前使用一些东西告诉你后面的类型(可能是完整类型,可能是一些标记代码,或者可能是元素名称(XML),成员名称(JSON)等)
  • 在A之前写出A的数字,Bs之前的B的数量等等
  • 如果使用BinaryFormatter或NetDataContractSerializer之类的东西(两者都包含类型元数据),请正常反序列化,然后使用GetType()查找给出的内容