运行下一个代码时:
int myInt = 13;
object myObj = myInt;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bf.Serialize(ms, myObj);
byte[] myByteArray = ms.ToArray();
你得到一个长度为54字节的数组 - 我不明白你为什么不得到一个4字节长的数组。
即使您尝试序列化int变量(而不是对象变量),如下所示: bf.Serialize(ms,myInt);
你得到相同的结果。 我的目标是将不同类型(Int32,Int16等)转换为字节数组,因此我无法使用
BitConverter.GetBytes(myObj);
因为它无法编译:
Error 1 The best overloaded method match for 'System.BitConverter.GetBytes(bool)' has some invalid arguments...
这很明显,因为编译器无法明确地将对象转换为其他内容...
我做错了什么?
答案 0 :(得分:4)
你没有得到一个4字节的数组,因为它必须序列化关于类型的所有信息,版本控制等。你说你想序列化各种不同的类型 - 你如何区分一个{{1如果您在数据和中的任何位置都不包含任何类型信息,并且希望能够在不指定类型的情况下序列化/反序列化,那么和两个int
值会一起使用?
如果您只想直接编写基元,请使用BinaryWriter
和BinaryReader
。
如果您想要更紧凑(和可移植)的二进制序列化协议,您可以考虑使用协议缓冲区(或其他各种序列化选项)。
答案 1 :(得分:1)
考虑使用专门用于基本类型的LosFormatter
或ObjectStateFormatter
。使用您的示例将生成一个大小为8和4的数组