WinRT и сохранение struct в массив байтов и из него?

Используя .NET 4.0, я могу быстро преобразовать struct в массив байтов и обратно, используя класс Marshal. Например, следующий простой пример будет выполняться со скоростью около 1 миллиона раз в секунду на моей машине, что достаточно быстро для моих целей...

    [StructLayout(LayoutKind.Sequential)]
    public struct ExampleStruct
    {
        int i1;
        int i2;
    }

    public byte[] StructToBytes()
    {
        ExampleStruct inst = new ExampleStruct();

        int len = Marshal.SizeOf(inst);
        byte[] arr = new byte[len];
        IntPtr ptr = Marshal.AllocHGlobal(len);
        Marshal.StructureToPtr(inst, ptr, true);
        Marshal.Copy(ptr, arr, 0, len);
        Marshal.FreeHGlobal(ptr);

        return arr;
    }

Но класс Marshal недоступен под WinRT, что достаточно разумно по соображениям безопасности, но это означает, что мне нужен другой способ достижения моего struct to/from массива байтов.

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

6
задан Kate Gregory 27 February 2012 в 11:07
поделиться