2009-05-22 2 views
4

У меня есть объектКак бинарно сериализовать объект с помощью Compact Framework?

struct _NETINFO { } 

, и я хочу, чтобы преобразовать его в Byte [] с помощью Compact Framework, я попытался следующие без успеха:

_NETINFO info = new _NETINFO(); 
byte[] buffer = (byte[])info; 

И это не работает! Единственный другой sugestion, который я нашел, - использовать BinaryFormatter, который недоступен в CF!

Любые другие предложения?

+0

Как насчет выделения класса BinaryFormatter из полной структуры? – Marcel

+0

Вы можете найти это полезным: http://www.codeproject.com/KB/cs/CF_serializer.aspx, или это: http://www.freewebs.com/compactFormatter/About.html, или это: http://www.sharpserializer.com/en/download/index.html – Nik

ответ

0

Насколько сложна структура? Для простых вещей, где у вас нет ссылки на другие вещи, это довольно легко:

var info = new _NETINFO(); 
    var buffer = new byte[Marshal.SizeOf(info)]; 
    var handle = GCHandle.Alloc(info, GCHandleType.Pinned); 
    try 
    { 
     Marshal.Copy(handle.AddrOfPinnedObject(), buffer, 0, buffer.Length); 
    } 
    finally 
    { 
     handle.Free(); 
    } 

Там также версия с использованием небезопасного кода, который короче, но это требует включения «позволяет небезопасный код» и по какой-то причине заставляет некоторых людей впадать в панику.

Желаемый код, разрешающий выполнение этого действия без копии (или наоборот - отбрасывание байтового массива в структуру), но, к сожалению, это не так.

Смежные вопросы