我如何将Entity Framework对象序列化为字节数组(所以我可以用redis缓存它)?
序列化通常需要添加属性的属性,但因为这个项目首先是数据库,所以由于代码生成我无法添加属性(而且我也不确定如何在没有.NET的情况下说出我想要序列化的内容尝试通过嵌套集合来序列化整个数据库。)
我喜欢实现的目标是:
Product product;
using(var context = new MyContext())
{
product = new ProductRepository(context).GetItem(123456);
}
byte[] productSerialized = Serialize(product);
将repo加载的任何内容序列化,并且忽略任何内容。如果我能接近这个,那就太好了。
答案 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;
}