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

标签 serialization compact-framework

我有一个对象

struct _NETINFO { }

我想使用 Compact Framework 将其转换为 Byte[],我尝试了以下操作但没有成功:
_NETINFO info = new _NETINFO();
byte[] buffer = (byte[])info;

它不起作用!我发现的唯一其他建议是使用在 CF 中不可用的 BinaryFormatter!

还有其他建议吗?

最佳答案

结构有多复杂?对于没有指向其他内容的指针的简单事情,这很容易:

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

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

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

关于serialization - 如何使用 Compact Framework 对对象进行二进制序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897073/

相关文章:

c++ - 如何避免序列化器和容器序列化器之间的循环模板依赖?

c++ - 序列化 C++ 对象

compact-framework - .net 紧凑型框架 : Avoid program being started twice concurrently

c# - Action<T> 委托(delegate)与与处置相关的事件处理程序

java - 是否有 JAXB 注释可以执行此操作?

perl - 如何将 Moose 对象转换为 JSON 以在 Catalyst 中使用?

c# - 调试器可视化工具和 "Type is not marked as serializable"

wcf - 如何将数据推送到.NET CF客户端?

c# - 在设计时限制用户控件的大小

visual-studio-2008 - 如何在 Visual Studio 2008 中为自定义用户控件提供设计时支持?