我的问题是是否可以确定引用类型的序列化大小(以字节为单位)。
情况如下:
我正在使用 BinaryFormatter 类来序列化基本的 .NET 类型,例如:
[Serializable]
public class Foo
{
public string Foo1 { get; set; }
public string Foo2 { get; set; }
}
我将每个项目序列化为一个字节 [],然后将该段添加到现有字节 [] 的末尾,并在每个段的末尾添加一个回车以分隔对象。
为了反序列化,我使用 Marshal.ReadByte() 如下:
List<byte> buffer = new List<byte>();
for (int i = 0; i < MapSize; i++)
{
byte b = Marshal.ReadByte(readPtr , i);
if (b != delim) // read until encounter a carriage return
buffer.Add(b);
else
break;
}
readPtr = readPtr + buffer.Count + 1; // incrementing the pointer for the next object
return buffer.ToArray();
我相信使用 Marshal.Copy() 会更有效,但我需要提前知道序列化字节段的长度。有没有一种方法可以可靠地从被序列化的类型中计算出来,或者我可以使用一种更有效的方法?
此外,最终使用回车将不可靠。所以我想知道是否有更标准的方式来分隔对象,或者通过自定义我的 BinaryFormatter 或使用其他一些标准化的最佳实践?例如,如果 BinaryFormatter 的序列化说是通用 List<>,是否有一种特定的方式来分隔对象?