Используя C # / .NET для моего приложения, в моей основной модели данных есть ряд классов, которые представляют «двоичный» (в отличие от текстового) контент.У меня есть такая установка наследования:
По сути, абстрактный класс BinaryContent
содержит MemoryStream
, в котором хранятся произвольные двоичные данные.Эти данные читаются из файла на диске.Каждый тип двоичных данных, которые я планирую хранить, будет производным типом, таким как ImageContent
и FontContent
.Эти производные типы будут интерпретировать двоичные данные в BinaryContent.Content
.Например, ImageContent
создаст BitmapImage
(хранится в ImageSource) из MemoryStream.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 вопроса.
- У кого-нибудь есть предложения по решению этой проблемы?
- У кого-нибудь есть другие предложенные способы хранения произвольных двоичных данных, которые будут (де) сериализированы?
Пожалуйста, не стесняйтесь спрашивать разъяснения по любому вопросу о моем вопросе.
Спасибо.