C# C:简单类的序列化

C# C:简单类的序列化,c#,serialization,C#,Serialization,我在上尝试了基本序列化的修改和简化的MSDN示例 因此,我希望在MyFile.bin中找到2个字节:0x01 0x18 但不是这样的,我有一个结果: 为什么会有这一切。我怎样才能做我想做的事 此测试的目的是序列化更复杂的结构,以便将其保存到二进制文件中序列化程序还存储有关序列化对象的类型信息。 此信息在反序列化期间使用,以便实例化适当类的实例 我想建议您考虑一下二进制序列化。与BinaryFormatter相比,它速度快,处理类更改的效果更好。它可能比发明自己的序列化机制更安全。一个.Net对象

我在上尝试了基本序列化的修改和简化的MSDN示例

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

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


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

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


我想建议您考虑一下二进制序列化。与BinaryFormatter相比,它速度快,处理类更改的效果更好。它可能比发明自己的序列化机制更安全。

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


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

BinaryFormatter添加一些有关该结构的元数据。但是,即使您忽略了它-int每个有4个字节,为什么您希望看到2个字节有两个4字节的Int32结构?您应该对流使用using语句,以确保在发生异常时清理资源。Close不够安全,因为它可能会在到达该语句之前崩溃。抱歉,在发布MyObject类的两个成员是字节之前我无法更正,但我不知道如何编辑我的问题,因为这是真的,它没有回答OPs问题,那么最明确的部分是什么,我如何做我想做的事情呢?关于我问题的含糊部分:我的意思是,我的结果文件中怎么能有我类中仅有的2个字节?@user2192443-您必须实现自定义序列化。问题是Int32有4个字节,您想将其存储在1个字节中,这将丢失数据。@Jakub Konecki。谢谢,我发帖时犯了一个错误。有个字节。现在我已经纠正了这个问题
//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();