C#序列化结构体
在将对象或结构体序列化成⼆进制数据流时,我们通常都会使⽤ System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 类来实现,
但是这种⽅式会把对象或结构体的类型信息给序列化到数据流中, 在做通迅时,这种⽅式是不可取的.
在c/c++中,通常对某个协议使⽤ struct 进⾏存储,然后将其序列化, c#也能实现这样的功能. 具体的实现办法:
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);结构体sizeof
Marshal.StructureToPtr(data, handle.AddrOfPinnedObject(), false);
handle.Free();
return buffer;
}
作为参数的结构体,需要使⽤[StructLayout]和[FieldOffset]分别声明结构体和结构体中的成员.通过上⾯的⽅法,可以将结构体中的成员序列化成
我们需要的⼆进制数据流. ⼤部分的需求都可以实现, 但⽬前,我还不太清楚,如果需要实现类似于c/c++中, 使⽤联合体作为结构体成员,该如果实现.
如果有⼈知道,请留⾔告知,谢谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。