Как мне двоично сериализовать объект с помощью Compact Framework? - PullRequest
4 голосов
/ 22 мая 2009

У меня есть объект

struct _NETINFO { }

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

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

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

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

1 Ответ

0 голосов
/ 18 августа 2011

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

    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();
    }

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

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

...