我有2个用户定义的类,名为事件和图像,事件有一个属性存储 EventImage < / em>,名为 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 [] ,我希望它的整个内容都是 serialize < / em>,也似乎我失败了。
这是我的代码序列化:
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));
结果是(只是假设值): 100 200 300
但我希望结果应该是600(100 + 200 + 300),500(200 + 300)和300.
所以,我认为我的序列化并不真正序列化整个内容,它只是使用基本类型序列化属性,但没有嵌套对象,我是对的吗?
我搜索过很多帖子,我发现有很多关于“XML序列化”的类似问题的答案,但我不确定它是否有用。需要我使用它还是还有其他更好的方法吗?提前谢谢!
答案 0 :(得分:1)
快速做一个测试来检查平等。它过去了。
正确序列化和反序列化。
结论,在测试之前,不要判断是否发生了某些事情。
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);
}
}