Двоичная сериализация объекта Silverlight XAML - PullRequest
3 голосов
/ 07 апреля 2009

Я работаю над приложением Silverlight, которое должно отображать сложную 2-мерную векторную графику. Он загружает сжатый файл XAML с сервера, анализирует его (XamlRead) и внедряет в корневой каталог макета на странице. Это прекрасно работает для довольно небольших файлов xaml. Проблема в том, что мне нужно, чтобы он работал с гораздо большим файлом (в нем гораздо больше контента). Например, один из моих несжатых файлов xaml имеет размер 20 МБ, а метод XamlRead требует много времени для его анализа. Мой вопрос, если есть ли способ сделать все синтаксический анализ на стороне сервера. Лучше всего хранить в базе данных сериализованный двоичный вывод метода XamlRead как BLOB. Однако, когда я пытаюсь сериализовать его, я получаю сообщение, что «Объект Canvas не помечен как сериализуемый». Я буду очень признателен за любые советы.

Ответы [ 3 ]

2 голосов
/ 07 апреля 2009

Silverlight не имеет встроенной двоичной сериализации; однако protobuf-net работает на Silverlight и может помочь устранить этот пробел. В текущей сборке вы можете реально сериализовать только те типы, которыми вы управляете (из-за добавления атрибутов) - однако я в процессе большого рефакторинга, чтобы (помимо всего прочего) добавить поддержку сериализации типов без атрибутов.

Я ожидаю, что пройдет еще около 2 недель, прежде чем эта версия станет (надеюсь) стабильной сборкой, но вы можете на это взглянуть.

Обратите внимание, что вам все равно нужно будет оказать ему некоторую помощь (сообщив, что вы хотите, чтобы он сериализовался), но это может быть полезно.

В частности, формат данных («буферы протокола») спроектирован так, чтобы быть одновременно плотным и эффективным для обработки, что должно увеличить скорость анализа. Подробнее см. Здесь (номера указаны в основном .NET, а не в Silverlight)

1 голос
/ 03 апреля 2011

Я обнаружил, что пакет SharpSerializer очень прост в использовании для быстрой бинарной серизации в Silverlight: http://www.sharpserializer.com/en/index.html. Вам не нужно использовать атрибут Serializable - однако он только сериализует открытые члены.

0 голосов
/ 20 сентября 2009

Если синтаксический анализ действительно является проблемой, может помочь использование предварительно скомпилированных XAML-файлов, называемых «BAML». Это двоичное представление файла XAML. Поскольку двоичный формат имеет гораздо более дешевый синтаксический анализатор вместо слишком общего XML, это очень помогает. BAML также используется внутренне компилятором .NET для создания более компактных файлов.

Для получения дополнительной информации см. Также http://stuff.seans.com/2008/07/13/hello-wpf-world-part-2-why-xaml/

...