对象到字节的转换

Tal*_*Bin 1 .net c# conventions

当我试图将一个对象转换为字节数组时,我得到了一个奇怪的数组.这是代码:

        using (MemoryStream ms = new MemoryStream())
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, obj);
            Console.WriteLine(ByteArrayToString(ms.ToArray()));
        }
//int obj = 50;

//string ByteArrayToString(byte[] byteArr) the functionality of this method is pretty obvious
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

"00 01 00 00 00 FF FF FF FF 01 00 00 00 00 00 00 04 01 00 00 00 0C 53 79 73 74 65 6D 2E 49 6E 74 33 32 01 00 00 00 07 6D 5F 76 61 6C 75 65 00 08 32 00 00 00 0B"

有人可以向我解释为什么?:)最佳结果应该只是"32 00 00 00".

das*_*ght 8

由于序列化程序需要提供足够的信息来反序列化数据,因此它必须包含有关要序列化的对象的一些元数据.具体来说,

53 79 73 74 65 6D 2E 49 6E 74 33 32
Run Code Online (Sandbox Code Playgroud)

部分代表 System.Int32

如果您使用BinaryWriter它的Write(Int32)方法而不是它的方法,您将获得所需的效果:您的内存流将只包含整数中的四个字节.如果不知道你Int32在流中写了一个,你将无法反序列化它.