none
Сериализация Brush RRS feed

  • Вопрос

  • Столкнулся с неожиданной проблемой - классы наследники Brush не сериализуюстся.

    Вариант сериализацией только необходимых значений через класс посредник понятен, но не удобен так одно из свойств может быть любым из наследников (SolidColorBrush, LinearGradientBrush, RadialGradientBrush, ImageBrush) да и кода больше.

    Возможно есть какое то решение установку атрибутов или еще чего. Кто сталкивался?


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    7 января 2013 г. 16:25
    Отвечающий

Ответы

  • Ну, например, написать статический класс, с расширяющим методом и статическим методом, которые будет иметь сигнатуру вида:

    static class BrushSerializator
    {
        public static void Serialize(this Brush p_brush, string p_filePath)
        {
        }
    
        public static Brush Deserialize(string p_filePath)
        {
        }
    }

    Ну и в них, делать сериализацию/десериализацию, в зависимости от того, какая у нас кисть в файле или на которой вызвали Serialize. Если в файлы сохранять необходимости нет, то первый метод может возвращать массив байт/строку, и не иметь второго параметра, ну а второй принимать эту строку/массив байт.

    • Помечено в качестве ответа LXGDARKEditor 8 января 2013 г. 7:54
    8 января 2013 г. 7:52
    Отвечающий

Все ответы

  • Добрый день.

    Полазив по интернетам, склоняюсь к мысли, что придется писать свой сериалихатор/десериализатор...

    8 января 2013 г. 7:37
    Отвечающий
  • Добрый день.

    Полазив по интернетам, склоняюсь к мысли, что придется писать свой сериалихатор/десериализатор...

    Я вчера весь день в интернетах :) Под своим сериализатором вы понимаете некий специализированный класс реализованый по некому интерфейсу или же промежуточный класс, который просто превращает непонятный Brush в набор полей с понятными сериализатору типами?

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    8 января 2013 г. 7:39
    Отвечающий
  • Ну, например, написать статический класс, с расширяющим методом и статическим методом, которые будет иметь сигнатуру вида:

    static class BrushSerializator
    {
        public static void Serialize(this Brush p_brush, string p_filePath)
        {
        }
    
        public static Brush Deserialize(string p_filePath)
        {
        }
    }

    Ну и в них, делать сериализацию/десериализацию, в зависимости от того, какая у нас кисть в файле или на которой вызвали Serialize. Если в файлы сохранять необходимости нет, то первый метод может возвращать массив байт/строку, и не иметь второго параметра, ну а второй принимать эту строку/массив байт.

    • Помечено в качестве ответа LXGDARKEditor 8 января 2013 г. 7:54
    8 января 2013 г. 7:52
    Отвечающий