• Авторизация


Формат даты при сериализации XML ASP.NET 13-01-2008 23:09 к комментариям - к полной версии - понравилось!


Возникла следующая проблема... Необходимо, чтобы веб-служба обменивалась информацией с потребителями (по протоколу HTTP) объектами. Способ обмена информации - сериализованные в формат XML объекты. Будем рассматривать объекты класса
[XmlRoot("Message")] //переименовываем название по-умолчания для того, чтобы в структуре XML файла узел назывался именно так
        public class SMSMessage {
            public SMSMessage() {}
            [XmlAttribute]
            public int id;
            [XmlAttribute("submit-date")] //присваиваем определенное имя данному атрибуту
            public DateTime submitdate;
            [XmlAttribute]
            public string msisdn;
            [XmlAttribute("service-number")]
            public string short_number;        
            [XmlAttribute("operator")]
            public string network;
            public Content content;
        }

Проблема заключалась в том, что сериализованный объект:
  <message id="1" submit-date="2007-12-15T13:03:47.703125+04:00" msisdn="79277338091" service-number="3533" operator="MFVolga">
    <content type="text/plain">Недвижимость</content>
   </message>

, при этом атрибут submit-sdate преобразует тип DateTime в строку согласно региональным текущим настройкам на данном компьютере. Так и не найдя настройки формата сериализации даты в XML в ASP.NET, я предлагаю следующий способ: вводим строковое свойство, которое будет брать и устанавливать дату внутреннего (типа private) атрибута объекта (здесь уже тип DateTime). Поле типа DateTime необходимо выставить в XmlIgnore для того, чтобы не происходило путаницы.
Результирующий класс можно оформить, например, следующим образом:
[XmlRoot("Message")]
public class SMSMessage
{
    public SMSMessage() { }
    [XmlAttribute]
    public int id;
    [XmlIgnore]
    public DateTime submitdate;
    [XmlAttribute("submit-date")]
    public string _submitdate
    {
        get
        {
            CultureInfo CInfo = new CultureInfo("en-US");
            return submitdate.ToString("dd-MMM-yy hh.mm.ss tt", CInfo).ToUpper();
        }
        set
        {
            CultureInfo CInfo = new CultureInfo("en-US");
            submitdate = DateTime.ParseExact(value, "dd-MMM-yy hh.mm.ss tt", CInfo);
        }
    }
    [XmlAttribute]
    public string msisdn;
    [XmlAttribute("service-number")]
    public string short_number;
    [XmlAttribute("operator")]
    public string network;
    public Content content;
    [XmlAttribute("ref-id")]
    public int ref_id;
}

при этом мы добиваемся желаемого эффекта! Серилизованный содержит атрибут submit-sate выглядит в том виде, как нам хотелось.
  <message id="1" msisdn="79277338091" service-number="3533" operator="MFVolga" submit-date="14-JAN-08 12.07.29 AM">
    <content type="text/plain">недвижимость</content>
   </message>
Добились того, чего хотели...



вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Формат даты при сериализации XML ASP.NET | Бляндер - Ничто на свете не проходит бесследно... | Лента друзей Бляндер / Полная версия Добавить в друзья Страницы: раньше»