2009-04-06 3 views
3

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

ответ

2

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

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

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

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

0

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

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

1

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

+0

Sharpserializer только сериализует публичные свойства. И вы можете определить правила для исключения определенных свойств (т. Е. Canvas). Во время разработки вы можете использовать xml-сериализатор sharpserializer, чтобы увидеть, что сериализовано. после завершения вы переходите на двоичную сериализацию, чтобы иметь меньший объем памяти. – k3b

Смежные вопросы