为什么Bitmap可以使用DataContractSerializer进行序列化,但BitmapImage不是?

时间:2015-09-25 13:31:49

标签: wpf bitmap datacontractserializer bitmapimage

我有一个WPF项目,我使用绑定到UI的System.Drawing.Bitmap属性。这是使用DataContractSerializer反序列化和序列化的。如果我将其更改为System.Windows.Media.Imaging.BitmapImage,那么在反序列化后我会得到null StreamSource

在查找SO时,我发现序列化BitmapImage是不可能/不可取的。谁能告诉我为什么不可能?

谢谢。

1 个答案:

答案 0 :(得分:1)

直接回答你的问题:Bitmap可以用DataContractSerializer序列化,因为Bitmap实现了ISerializable接口。这意味着Bitmap类的开发人员特别注意实现序列化\反序列化逻辑并使其可供您使用。 BitmapImage类不是这样 - 它甚至没有标记Serializable属性,因此不打算直接序列化。 DataContractSerializer尝试它是最好的,但是它无法在没有指导的情况下序列化诸如StreamSource之类的属性,因为Stream是抽象类,并且它不知道如何序列化\反序列化(假设例如StreamSource是FileStream - 它应该如何处理吗?)。