[英]Serialize nested objects in C#
我有2個用戶定義的類,分別稱為Event和Image , Event具有一個存儲了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.