如何将数据库第一个 EF5 对象序列化为字节数组

本文关键字:序列化 字节 字节数 数组 对象 EF5 数据库 第一个 | 更新日期: 2023-09-27 18:34:02

如何最好地将实体框架对象序列化为字节数组(以便我可以将其缓存在 redis 中)?

序列化通常需要向属性添加属性,

但由于此项目首先是数据库,因此由于代码生成,我无法添加属性(而且我不确定如何在没有 .NET 尝试序列化整个数据库的情况下说出我想要的序列化,因为要通过嵌套集合)。

想要实现的是这样的目标:

Product product;
using(var context = new MyContext())
{
product = new ProductRepository(context).GetItem(123456);
}
byte[] productSerialized = Serialize(product);

存储库加载的任何内容都将被序列化,而未加载的任何内容将被忽略。如果我能接近这一点,那就太好了。

如何将数据库第一个 EF5 对象序列化为字节数组

如果你的Product是一个结构体,那么这可能会帮助你:

    public byte[] Serialize(Product p)
    {
        var size = Marshal.SizeOf(typeof(Product));
        // Both managed and unmanaged buffers required.
        var bytes = new byte[size];
        var ptr = Marshal.AllocHGlobal(size);
        // Copy object byte-to-byte to unmanaged memory.
        Marshal.StructureToPtr(p, ptr, false);
        // Copy data from unmanaged memory to managed buffer.
        Marshal.Copy(ptr, bytes, 0, size);
        // Release unmanaged memory.
        Marshal.FreeHGlobal(ptr);
        return bytes;
    }

您可以使用 MemoryStream 并获取其缓冲区,如下所示:

    public byte[] Serialize(Product product)
    {
        MemoryStream stream = new MemoryStream();
        XmlSerializer serializer = new XmlSerializer(typeof(Product)); 
        serializer.Serialize(stream, product);
        return stream.GetBuffer();
    }