Я работаю над приложением Silverlight, которое должно отображать сложную векторную графику 2d. Загружает файл XAML с сервера, анализирует его (XamlRead) и вводит корень макета на странице. Это работает отлично для довольно небольших файлов xaml. Проблемы в том, что мне нужно заставить его работать с гораздо большим файлом (в нем больше контента). Например, один из моих несжатых xaml-файлов имеет размер 20 Мбайт, а метод XamlRead использует инструмент для его синтаксического анализа. Мой вопрос в том, есть ли способ выполнить весь синтаксический анализ на стороне сервера. Лучше всего просто сохранить сериализованный двоичный вывод метода XamlRead как BLOB в базе данных. Однако, когда я пытаюсь его сериализовать, я получаю сообщение о том, что «объект Canvas не помечен как сериализуемый». Я буду очень признателен за любые советы.Двоичная сериализация объекта Silverlight XAML
ответ
В Silverlight нет встроенной двоичной сериализации; однако protobuf-net работает на Silverlight и может помочь подключить этот пробел. В текущей сборке вы можете реально сериализовать только те типы, которыми вы управляете (из-за добавления атрибутов). Однако я в середине большого рефакторинга (среди прочего) добавляю поддержку для сериализации типов без атрибутов.
Я ожидаю, что это будет еще 2 недели до того, как это будет доступно для стабильной сборки (надеюсь) стабильной, но вы можете взглянуть на нее тогда.
Обратите внимание, что вам все равно нужно будет дать ему некоторую помощь (сообщив, что вы хотите его сериализовать), но это может быть полезно.
В частности, формат данных («буферы протокола») должен быть плотным и эффективным для обработки, что должно увеличить скорость синтаксического анализа. See here для большего количества (номера из основного .NET, а не Silverlight)
Если синтаксический анализ действительно является проблемой, он может помочь использовать предварительно скомпилированные XAML, называемые «BAML». Это двоичное представление файла XAML. Поскольку бинарный формат имеет гораздо более дешевый парсер вместо слишком общего XML, это очень помогает. BAML также используется внутри компилятора .NET для создания более компактных файлов.
Для получения дополнительной информации см также http://stuff.seans.com/2008/07/13/hello-wpf-world-part-2-why-xaml/
Я нашел пакет SharpSerializer очень прост в использовании для быстрого бинарного serlization в Silverlight: http://www.sharpserializer.com/en/index.html. Вам не нужно использовать атрибут Serializable, но он только сериализует публичные элементы.
- 1. двоичная сериализация типов, определенных в сборке silverlight
- 2. .Net Двоичная сериализация - как ограничить диаграмму объекта?
- 3. двоичная сериализация в список
- 4. C# ошибка двоичная сериализация
- 5. Двоичная сериализация на сокетах
- 6. Условная C# двоичная сериализация
- 7. C# - двоичная сериализация InvalidCastException
- 8. Двоичная сериализация массива DateTime
- 9. Двоичная сериализация всего класса автоматически
- 10. Двоичная сериализация изменчивой записи F #
- 11. Почему двоичная сериализация быстрее, чем сериализация XML?
- 12. Двоичная «насыпная» сериализация битовых полей
- 13. двоичная сериализация url_decode64 в строку
- 14. Двоичная сериализация без сериализуемого атрибута
- 15. Двоичная сериализация двоичного диска WPF
- 16. Сериализация ConcurrentBag XAML
- 17. Двоичная сериализация/де-сериализация в C++ и C#
- 18. Сериализация XAML - указание свойства обязательна
- 19. Двоичная сериализация свойства на основе enum
- 20. Двоичная сериализация медленная (иногда) в .NET 4.6
- 21. Двоичная сериализация для компактной рамки 3.5
- 22. двоичная сериализация/десериализация (BinaryFormatter) в Parallel.ForEach
- 23. Двоичная сериализация в чистом C/C++
- 24. C# двоичная сериализация «неожиданный двоичный элемент: 225»
- 25. protobuf-net НЕ быстрее, чем двоичная сериализация?
- 26. Двоичная сериализация по сравнению с использованием WCF
- 27. F # двоичная сериализация для XNA и XBox
- 28. .NET двоичная сериализация условно без ISerializable
- 29. Сериализация Silverlight XML UIElement
- 30. Сериализация исключений WCF + Silverlight
Sharpserializer только сериализует публичные свойства. И вы можете определить правила для исключения определенных свойств (т. Е. Canvas). Во время разработки вы можете использовать xml-сериализатор sharpserializer, чтобы увидеть, что сериализовано. после завершения вы переходите на двоичную сериализацию, чтобы иметь меньший объем памяти. – k3b