Формат даты при сериализации 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