在我的应用程序中使用C#/ .NET,我的主数据模型中有一系列表示“二进制”(而不是文本)内容的类。我有这样的继承设置:
基本上,抽象类BinaryContent
包含存储任意二进制数据的MemoryStream
。该数据是从磁盘上的文件中读取的。我计划存储的每种类型的二进制数据都是派生类型,例如ImageContent
和FontContent
。那些派生类型将解释BinaryContent.Content
中的二进制数据。例如,ImageContent
将从MemoryStream创建一个BitmapImage
(存储在ImageSource中)。 FontContent
当然会从BinaryContent.Content
创建一种字体。我选择这种做法是因为我希望能够基本上存储内容文件的副本(即图像),而不必依赖于磁盘上特定位置的文件。
我还使用二进制序列化将这些类的实例存储在“项目文件”中。我这样做基本上将所有东西“打包”在一起。看来,当我尝试反序列化MemoryStream时,我遇到了麻烦。当我从MemoryStream创建图像时会发生问题。在反序列化后运行以下方法时,会发生FileFormatexception
。
private void RefreshImageFromContent()
{
BitmapImage image = null;
if (Content != null &&
Content.Length != 0L)
{
image = new BitmapImage();
image.BeginInit();
image.StreamSource = Content;
image.EndInit(); //throws FileFormatException
}
Image = image;
}
FileFormatException
消息是:
“图像无法解码。图像标题可能已损坏。”
内部异常:“来自HRESULT的异常:0x88982F61”
我现在最好的猜测是,在序列化或反序列化期间,BinaryContent.Content
中的数据会发生变形。
这导致我提出两个问题。
请随时询问有关我的问题的任何说明。
感谢。
答案 0 :(得分:2)
content.Position
的{{1}}是什么?
可能是流的位置未设置为开始(或流中的正确位置)。