簡體   English   中英

在C#中序列化嵌套對象

[英]Serialize nested objects in C#

我有2個用戶定義的類,分別稱為EventImageEvent具有一個存儲了EventImage列表的屬性 ,該列表稱為EventImages Image類中,有一個byte []類型屬性,用於存儲一個Image文件的byte []。

這是2個類的定義:

[Serializable]
public Class Event
{
    public String Name {get; set;}
    public DateTime EventTime { get; set;}
    public List<Image> EventImages { get; set; }
    ...
}

[Serializable]
public Class Image
{
    public DateTime ImageTime { get; set;}
    public byte[] pData {get; set;}
    ...
}

現在我的問題是,我想將Event對象序列化為byte [] ,並且我希望它的全部內容也可以序列化 ,但是看來我失敗了。

這是我執行序列化的代碼:

    public static byte[] ObjectToByteArray(object obj)
    {
        if (obj == null)
        {
            return null;
        }
        else
        {
            BinaryFormatter bF = new BinaryFormatter();
            using (MemoryStream mS = new MemoryStream())
            {
                bF.Serialize(mS, obj);
                return mS.ToArray();
            }
        }
    }

這是驗證代碼:

Console.WriteLine(ObjectToByteArray(Event));
Console.WriteLine(ObjectToByteArray(Event.EventImage));        
Console.WriteLine(ObjectToByteArray(Event.EventImages.FirstOrDefault().pData));

結果是(只是假設值):100200300

但我希望結果應該是600(100 + 200 + 300),500(200 + 300)和300。

所以,我認為我的序列化並沒有真正序列化整個內容,它只是序列化了具有Basic Types的屬性,但是沒有嵌套的對象,對嗎?

我搜索了很多帖子,找到了許多類似“ XML序列化”的類似問題的答案,但是我不確定它是否有用。 我需要使用它還是有其他更好的方法? 提前致謝!

快速進行測試以檢查是否相等。 它通過了。

正確地序列化和反序列化。

結論,在測試之前不要判斷是否正在發生任何事情。

    public static void Run()
    {
        var i = new Image
        {
            ImageTime = DateTime.UtcNow,
            pData = Guid.NewGuid().ToByteArray()
        };

        var e = new Event
        {
            Name = Guid.NewGuid().ToString(),
            EventTime = DateTime.UtcNow,
            EventImages = new List<Image> {i}
        };

        var bytes = ObjectToByteArray(e);
        var e2 = ObjectFromByteArray(bytes);

        Console.WriteLine(e.Equals(e2));
    }

    public static byte[] ObjectToByteArray(object obj)
    {
        if (obj == null)
        {
            return null;
        }

        var bF = new BinaryFormatter();
        using (var mS = new MemoryStream())
        {
            bF.Serialize(mS, obj);
            return mS.ToArray();
        }
    }

    public static object ObjectFromByteArray(byte[] bytes)
    {
        if (bytes == null)
        {
            return null;
        }

        var bF = new BinaryFormatter();
        using (var mS = new MemoryStream(bytes))
        {
            return bF.Deserialize(mS);
        }
    }

暫無
暫無

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

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