Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить класс в XML, если класс содержит какртинки 
V
    Опции темы
Voyager
Дата 21.2.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Код

Stream stream = File.OpenWrite(aConfigFile);
XmlSerializer xs = new XmlSerializer(typeof(ProjectEntry));
xs.Serialize(stream, pe);
stream.Close();


Если класс pe содержит картинку (Image), то не сохраняет. 
Как сохранить массив классов (содержащих и картинки) в XML?
PM   Вверх
mr.DUDA
Дата 21.2.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Добавить в класс паблик-свойство, возвращающее и устанавливающее байтовое содержимое картинки - оно и будет сохраняться/загружаться. А чтобы картинку не пыталось сериализовать напрямую, поставить над свойством Image атрибут XmlIgnore


--------------------
user posted image
PM MAIL WWW   Вверх
Elfet
Дата 21.4.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Что то я не совсем понял как это делается smile
Код

        [System.Xml.Serialization.XmlIgnore]
        public Image icon;
        public string Icon
        {
            get
            {
                return icon.;
            }
            set
            {
                icon = Image.;
            }
        }



--------------------
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 21.4.2007, 16:21 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Elfet, да всё просто...
Код
using System;
using System.IO;
using System.Drawing;
using System.Xml.Serialization;


public class Some
{
    Image _icon;

    /// <summary>
    /// Возвращает и устанавливает картинку.
    /// </summary>
    [XmlIgnore]
    public Image Icon
    {
        get
        {
            return _icon;
        }
        set
        {
            _icon = value;
        }
    }

    /// <summary>
    /// Возвращает и устанавливает картинку в виде массива байтов.
    /// Используется только для XML-сериализации.
    /// </summary>
    public byte[] IconBytes
    {
        get
        {
            MemoryStream stream = new MemoryStream();
            _icon.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
            return stream.ToArray();
        }
        set
        {
            _icon = Image.FromStream(new MemoryStream(value));
        }
    }
}


// проверим...
class Program
{
    static void Main()
    {
        Some obj = new Some();
        obj.Icon = new Bitmap(10, 10);

        // сериализация
        XmlSerializer ser = new XmlSerializer(typeof(Some));
        FileStream stream = File.Create(@"c:\1.xml");
        ser.Serialize(stream, obj);
        stream.Close();

        // десериализация
        stream = File.OpenRead(@"c:\1.xml");
        Some deser = (Some)ser.Deserialize(stream);
        Console.WriteLine("Картинка {0} x {1}", deser.Icon.Width, deser.Icon.Height);
    }
}




--------------------
user posted image
PM MAIL WWW   Вверх
Elfet
Дата 21.4.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Хм... а мне говорит про какую-то ошибку в создании xml документа. Если я всё правильно понял нужно было просто в класс добавить вот это:
Код

        /// <summary>
        /// Icon
        /// </summary>
        private Image icon;
        /// <summary>
        /// Возвращает и устанавливает картинку.
        /// </summary>
        [System.Xml.Serialization.XmlIgnore]
        public Image Icon
        {
            get
            {
                return icon;
            }
            set
            {
                icon = value;
            }
        }
        /// <summary>
        /// Возвращает и устанавливает картинку в виде массива байтов.
        /// Используется только для XML-сериализации.
        /// </summary>
        public byte[] IconBytes
        {
            get
            {
                System.IO.MemoryStream stream = new System.IO.MemoryStream();
                icon.Save(stream, System.Drawing.Imaging.ImageFormat.Icon);
                return stream.ToArray();
            }
            set
            {
                icon = Image.FromStream(new System.IO.MemoryStream(value));
            }
        }


Добавлено через 2 минуты и 32 секунды
А вот пример работает :/


--------------------
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 21.4.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Elfet @  21.4.2007,  16:37 Найти цитируемый пост)
Хм... а мне говорит про какую-то ошибку в создании xml документа.

В отладчике посмотри, что написано в сообщении exception-а, там обычно пишут подробную причину что не так. Или же просто файл не может создать.


--------------------
user posted image
PM MAIL WWW   Вверх
Elfet
Дата 21.4.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Заработал smile Почемуто Icon вот тут вот не хотел:
Код

System.Drawing.Imaging.ImageFormat.Icon

Заменил на Png


--------------------
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 22.4.2007, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Elfet, ну потому что Icon - это специальный формат для иконок (*.ico), а не для произвольных изображений  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
Elfet
Дата 22.4.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Ясно, спасибо smile


--------------------
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0885 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.