Как хранить произвольные двоичные данные в двоичном сериализованном классе? - PullRequest
2 голосов
/ 20 октября 2010

Используя C # / .NET для моего приложения, в моей основной модели данных есть ряд классов, которые представляют «двоичный» (в отличие от текстового) контент.У меня есть такая установка наследования:

alt text

По сути, абстрактный класс 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 вопроса.

  1. У кого-нибудь есть предложения по решению этой проблемы?
  2. У кого-нибудь есть другие предложенные способы хранения произвольных двоичных данных, которые будут (де) сериализированы?

Пожалуйста, не стесняйтесь спрашивать разъяснения по любому вопросу о моем вопросе.

Спасибо.

1 Ответ

2 голосов
/ 20 октября 2010

Что такое content.Position на image.StreamSource = Content;?

Вполне вероятно, что позиция потока не установлена ​​на начало (или правильную позицию в потоке thw).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...