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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация обобщенного класса, Сериализовать ArrayList generic объектов 
:(
    Опции темы
maxxim010485
Дата 4.12.2010, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем! Помогите решить следующую проблему:
Имеется generic класс:
Код

    public class Criterion<T>
    {
        [XmlElement(ElementName = "Name", IsNullable = false)]
        private string _Name;
        public string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
        }

        [XmlElement(ElementName = "Column", IsNullable = false)]
        private string _Column;
        public string Column
        {
            get
            {
                return _Column;
            }
            set
            {
                _Column = value;
            }
        }

        [XmlElement(ElementName = "IsCritical", IsNullable = false)]
        private bool _IsCritical;
        public bool IsCritical
        {
            get
            {
                return _IsCritical;
            }
            set
            {
                _IsCritical = value;
            }
        }

        int _RangeMin = 0;
        int _RangeMax = 100;

        public int RangeMin
        {
            get
            {
                if (typeof(T) == typeof(int))
                    return _RangeMin;
                return -1;
            }
            set
            {
                if ((typeof(T) == typeof(int)) && (value >= 0))
                    _RangeMin = value;
            }
        }
        public int RangeMax
        {
            get
            {
                if (typeof(T) == typeof(int))
                    return _RangeMax;
                return -1;
            }
            set
            {
                if ((typeof(T) == typeof(int)) && (value >= 0))
                    _RangeMax = value;
            }
        }

        public CriterionType Type
        {
            get
            {
                if (typeof(T) == typeof(int))
                {
                    return CriterionType.Range;
                }
                else if (typeof(T) == typeof(string))
                {
                    return CriterionType.String;
                }
                else if (typeof(T) == typeof(bool))
                {
                    return CriterionType.Boolean;
                }
                else
                    return CriterionType.Unknown;
            }
        }

        [XmlElement(ElementName = "Value", IsNullable = false)]
        private T _Value;
        public T Value
        {
            get
            {
                return _Value;
            }
            set
            {
                // диапозон
                if (typeof(T) == typeof(int))
                {
                    int iTmp = int.Parse(value.ToString());
                    if ((iTmp >= _RangeMin) && (iTmp <= _RangeMax))
                        _Value = value;
                }
                else if (typeof(T) == typeof(string))
                {
                    _Value = value;
                }
                else if (typeof(T) == typeof(bool))
                {
                    _Value = value;
                }
            }
        }

        public Criterion()
        {
            _Name = "";
            _Column = "";
            _IsCritical = false;
        }

        public Criterion(string Name, string Column, bool IsCritical, T val)
        {
            _Name = Name;
            _Column = Column;
            _IsCritical = IsCritical;
            _Value = val;
        }

        public static int Serialize(string fileName, Criterion<T> qfNfo)
        {
            XmlSerializer xmlSer = new XmlSerializer(qfNfo.GetType());
            Stream fileStream = new FileStream(fileName, FileMode.Create);
            TextWriter writer = new StreamWriter(fileStream, Encoding.Unicode);
            try
            {
                xmlSer.Serialize(writer, qfNfo);
            }
            catch (SystemException e)
            {
                return -1;
            }
            finally
            {
                writer.Close();
            }
            return 0;
        }
        public static Criterion<T> Deserialize(string fileName)
        {
            try
            {
                Criterion<T> qfNfo = new Criterion<T>();
                Stream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                TextReader reader = new StreamReader(fileStream, Encoding.Unicode);
                try
                {
                    XmlSerializer xmlSerNew = new XmlSerializer(typeof(Criterion<T>));
                    qfNfo = (Criterion<T>)xmlSerNew.Deserialize(reader);
                }
                catch (SystemException e)
                {
                    return null;
                }
                finally
                {
                    reader.Close();
                }
                return qfNfo;
            }
            catch (SystemException e)
            {
                return null;
            }
        }
    }


Необходимо сериализовать ArrayList объектов этого класса (типы объектов могут быть int, string, bool)

Заранее всем спасибо!
PM MAIL   Вверх
jonie
Дата 4.12.2010, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



ну вы в любом случае можете наследовать IXmlSerializable и сами сериализовываться.. 
А стандартный XmlSerializer не жует такие классы?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
evgdev
Дата 4.12.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

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


 




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


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

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