如何使用Compact Framework二进制序列化对象?

时间:2009-05-22 09:32:28

标签: serialization compact-framework

我有一个对象

struct _NETINFO { }

我希望使用Compact Framework将其转换为Byte [],我尝试了以下内容而没有成功:

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

它不起作用!我发现的唯一其他消息是使用CF中没有的BinaryFormatter!

还有其他任何消息吗?

1 个答案:

答案 0 :(得分: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();
    }

还有一个使用不安全代码的版本更短,但这需要启用“允许不安全的代码”,并且由于某种原因会让一些人感到恐慌。

希望托管代码允许在没有副本的情况下执行此操作(或者反向 - 将字节数组转换为结构),但遗憾的是它没有。