如何使用紧凑框架对对象进行二进制序列化?

4
我有一个对象。
struct _NETINFO { }

我想使用Compact Framework将其转换为Byte[],但是我尝试了以下代码,没有成功:

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

但它不起作用!我找到的唯一其他建议是使用BinaryFormatter,但它在CF中不可用!

还有其他建议吗?


从完整框架中提取BinaryFormatter类怎么样? - Marcel
你可能会发现这些有用: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
1个回答

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

还有一个使用不安全代码的版本,代码更短,但需要打开"允许不安全代码"选项,这个原因让一些人感到恐慌。
希望托管代码可以在没有拷贝的情况下实现这个功能(或者反过来,将字节数组转换为结构体),但可惜它不能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接