アプリケーションにC#/。NETを使用すると、メインデータモデルに「バイナリ」(テキストではなく)コンテンツを表す一連のクラスがあります。私は次のような継承設定を持っています:
基本的に、抽象クラスには、任意のバイナリデータを格納BinaryContent
するが含まれています。MemoryStream
そのデータはディスク上のファイルから読み取られます。保存する予定のバイナリデータの各タイプは、やなどの派生タイプにImageContent
なりFontContent
ます。これらの派生型は、のバイナリデータを解釈しBinaryContent.Content
ます。ImageContent
たとえば、BitmapImage
MemoryStreamから(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
シリアル化または逆シリアル化中にデータが破損する何かが起こっているということです。
これは私に2つの質問をするように導きます。
- この問題を解決するための提案はありますか?
- (逆)シリアル化される任意のバイナリデータを格納する他の提案された方法はありますか?
私の質問については、遠慮なく説明を求めてください。
ありがとう。