Посмотрите на этот сайт: http://www.developerfusion.com/article/84519/mastering-structs-in-c/
Я думаю, вам понадобится больше контроля над вашими типами данных, особенно с сериализацией / десериализацией ваших данных.Это позволит вам ТОЧНО контролировать, как вы распределяете типы данных.
, взятые непосредственно из Мастеринг структур в C #
Структура макета
[StructLayout(LayoutKind.Sequential,
Pack = 1, CharSet = CharSet.Unicode)]
public struct DISPLAY_DEVICE
{
public int cb;
[MarshalAs(
UnmanagedType.ByValArray,
SizeConst=32)]
public char[] DeviceName;
[MarshalAs(
UnmanagedType.ByValArray,
SizeConst=128)]
public char[] DeviceString;
public int StateFlags;
[MarshalAs(
UnmanagedType.ByValArray,
SizeConst = 128)]
public char[] DeviceID;
[MarshalAs(
UnmanagedType.ByValArray,
SizeConst = 128)]
public char[] DeviceKey;
}
Сериализация
public static byte[]
RawSerialize(object anything)
{
int rawsize =
Marshal.SizeOf(anything);
IntPtr buffer =
Marshal.AllocHGlobal(rawsize);
Marshal.StructureToPtr(anything,
buffer, false);
byte[] rawdata = new byte[rawsize];
Marshal.Copy(buffer, rawdata,
0, rawsize);
Marshal.FreeHGlobal(buffer);
return rawdata;
}
Примечание:
Для базовой сериализации я не буду пытаться свернуть свою собственную, я просто использую встроенную сериализацию .NET: http://msdn.microsoft.com/en-us/library/4abbf6k0.aspx