如何将数据库的第一个EF5对象序列化为Byte数组?

时间:2014-12-12 14:06:13

标签: c# entity-framework serialization

我如何将Entity Framework对象序列化为字节数组(所以我可以用redis缓存它)?

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

喜欢实现的目标是:

Product product;
using(var context = new MyContext())
{
product = new ProductRepository(context).GetItem(123456);
}

byte[] productSerialized = Serialize(product);

将repo加载的任何内容序列化,并且忽略任何内容。如果我能接近这个,那就太好了。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果您的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;
    }