C#序列化结构体

在将对象或结构体序列化成二进制数据流时,咱们一般都会使用 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 类来实现,c++

可是这种方式会把对象或结构体的类型信息给序列化到数据流中, 在作通迅时,这种方式是不可取的.c#

在c/c++中,一般对某个协议使用 struct 进行存储,而后将其序列化, c#也能实现这样的功能. 具体的实现办法:spa

public static byte[] GetBytes<TStruct>(TStruct data) where TStruct : struct
{
    int structSize = Marshal.SizeOf(typeof(TStruct));
    byte[] buffer = new byte[structSize];
    GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
    Marshal.StructureToPtr(data, handle.AddrOfPinnedObject(), false);
    handle.Free();
    return buffer;
}

做为参数的结构体,须要使用 [StructLayout] 和 [FieldOffset]分别声明结构体和结构体中的成员.经过上面的方法,能够将结构体中的成员序列化成code

咱们须要的二进制数据流. 大部分的需求均可以实现, 但目前,我还不太清楚,若是须要实现相似于c/c++中, 使用联合体做为结构体成员,该若是实现.orm

若是有人知道,请留言告知,谢谢!对象

相关文章
相关标签/搜索