如何将数据库第一个 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);
存储库加载的任何内容都将被序列化,而未加载的任何内容将被忽略。如果我能接近这一点,那就太好了。
如果你的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();
}