1

我在http://msdn.microsoft.com/en-us/library/4abbf6k0.aspx尝试了基本序列化的(修改和简化)MSDN 示例

//the class :
[Serializable]
public class MyObject {
  public byte n1 = 0;
  public byte n2 = 0;
}

//The code
MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();    

所以,我希望在 MyFile.bin 中找到 2 个字节:0x01 0x18
但它不是这样的,我有这个结果:

在此处输入图像描述

为什么会有这一切。我怎么能做我想做的事。

该测试的目的是序列化更复杂的结构,以便将它们保存到二进制文件中

4

2 回答 2

0

序列化程序还存储有关已序列化对象的类型信息。在反序列化期间使用此信息,以便实例化适当类的实例。

我想建议您看一下用于二进制序列化的protobuf-net 。它速度快,并且比BinaryFormatter. 它可能比发明自己的序列化机制更安全。

于 2013-03-22T11:40:05.180 回答
0

.Net 对象的序列化很复杂。它还存储元数据以重新生成 .Net 类,因此不要期望它会根据类成员对齐。它是一种专有格式,只有 .Net 框架可以反序列化该类。

如果您想以这种方式进行序列化,您应该编写自定义序列化函数来覆盖默认值并序列化/反序列化您自己的类。

于 2013-03-22T11:41:50.560 回答