簡體   English   中英

如何將數據庫的第一個EF5對象序列化為Byte數組?

[英]How to serialize database first EF5 object to Byte array?

如何最好地將Entity Framework對象序列化為字節數組(以便可以將其緩存在Redis中)?

序列化通常需要將屬性添加到屬性中,但是由於該項目首先是數據庫,因此由於代碼生成,我無法添加屬性(而且我不確定在沒有.NET嘗試序列化的情況下我如何說要序列化的內容整個數據庫(因為要通過嵌套集合)。

實現是一樣的東西:

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

byte[] productSerialized = Serialize(product);

存儲庫中已加載的所有內容都將被序列化,而未存儲的內容將被忽略。 如果我什至可以解決這個問題,那就太好了。

您可以使用MemoryStream並獲取其緩沖區,如下所示:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM