none
Формат DateTime при десериализации RRS feed

  • Вопрос

  • Здравствуйте,
    Вот какая проблема возникает при десериализации.
    Есть такой вот кусок данных 

    <param>23.11.2012 14:14:14</param>

    Для десериализации в публичном классе использую 

    [XmlElement]
    public DateTime param

    Но при чтении генерируется исключение, мол не тот формат даты.
    Можно, конечно, читать в стринг, а потом переходить к дате.
    Но подозреваю что можно сделать красивее... Можно ли задать в классе вместе с типом DateTime его формат?
    Заранее спасибо

    23 ноября 2012 г. 12:59

Ответы

  • У Вас с локалью проблема, скорее всего. Если сериализуете Вы, то можете применить вот такое решение.

        [XmlIgnore]
        public DateTime Param { get;set;}
        private const string DateTimeFormat = "ddd, dd MMM yyyy HH:mm:ss";
        [XmlElement("startDate")]
        public string ParamXml
        {
            get { return Param.ToString(DateTimeFormat, CultureInfo.InvariantCulture); }
            set { Param = DateTime.ParseExact(value, DateTimeFormat, CultureInfo.InvariantCulture); }
        }

    • Помечено в качестве ответа abb269 25 ноября 2012 г. 14:26
    23 ноября 2012 г. 13:22
    Модератор

Все ответы

  • У Вас с локалью проблема, скорее всего. Если сериализуете Вы, то можете применить вот такое решение.

        [XmlIgnore]
        public DateTime Param { get;set;}
        private const string DateTimeFormat = "ddd, dd MMM yyyy HH:mm:ss";
        [XmlElement("startDate")]
        public string ParamXml
        {
            get { return Param.ToString(DateTimeFormat, CultureInfo.InvariantCulture); }
            set { Param = DateTime.ParseExact(value, DateTimeFormat, CultureInfo.InvariantCulture); }
        }

    • Помечено в качестве ответа abb269 25 ноября 2012 г. 14:26
    23 ноября 2012 г. 13:22
    Модератор
  • Эта строка - 23.11.2012 14:14:14 - не является форматом даты-времени для xml. Десериализатор ждёт именно формат xml. Сериализатор сохраняет именно в формате xml.

    Самым верным решением будет сохранение изначального значения в правильном формате.

    Чтобы не гадать с форматом при ручном формировании xml-файла, нужно использовать класс System.Xml.XmlConvert, специально предназначенный для этого, его метод ToString, принимающий DateTime.


    • Изменено Petalvik 23 ноября 2012 г. 14:35
    23 ноября 2012 г. 14:34
  • Спасибо за ответы. Но мой вопрос не снимается, мой вопрос не решен.

    Я получаю данные из интернета и сделать с ними ничего не могу.

    Поэтому вопрос остается. Как настроить атрибут XmlElement чтобы получать дату в формате "dd.mm.yyyy HH:mm:ss" ?

    24 ноября 2012 г. 16:45
  • Спасибо за ответы. Но мой вопрос не снимается, мой вопрос не решен.

    Я получаю данные из интернета и сделать с ними ничего не могу.

    Поэтому вопрос остается. Как настроить атрибут XmlElement чтобы получать дату в формате "dd.mm.yyyy HH:mm:ss" ?

    Ну ё-моё. Yatajga же привёл код. Достаточно заменить в нём строку формата, и заменить startDate на param.

    24 ноября 2012 г. 18:31