T>Как перевести структуру (последовательно поля) в набор байтов
T>На сегодняшний день я добавляю к таким структурам метод byte[] GetBytes(), который реализую самостоятельно.
Можно так:
public static byte[] RawSerialize<T>(T anything) where T : struct {
int rawsize = Marshal.SizeOf(anything);
byte[] rawdata = new byte[rawsize];
GCHandle handle = GCHandle.Alloc(rawdata, GCHandleType.Pinned);
Marshal.StructureToPtr(anything, handle.AddrOfPinnedObject(), false);
handle.Free();
return rawdata;
}
И обратно:
public static T RawDeserialize<T>(byte[] raw) where T : struct {
GCHandle handle = GCHandle.Alloc(raw, GCHandleType.Pinned);
T result = (T)Marshal.PtrToStructure(
handle.AddrOfPinnedObject(), typeof(T));
handle.Free();
return result;
}