Я понимаю, что это старый вопрос, но у меня была эта проблема сегодня, и я нашел обходной путь, используя свойства и приведение.
private string _date; // Private variable to store XML string
// Property that exposes date. Specifying the type forces
// the serializer to return the value as a string.
[XmlElement("date", Type = typeof(string))]
public object Date {
// Return a DateTime object
get
{
return
!string.IsNullOrEmpty(_date) ?
(DateTime?) Convert.ToDateTime(_date) :
null;
}
set { _date = (string)value; }
}
Теперь, когда вам нужно обратиться к дате, вы просто звоните:
var foo = (DateTime?)Bar.Date
С тех пор у меня все работает нормально. Если вы не возражаете против добавления дополнительного кода в свой код, вы можете сделать это и так!
Редактировать: Из-за комментария Дирка я решил вернуться к своей реализации в отдельной ветке. Вместо использования класса object
, который подвержен ошибкам компилятора во время выполнения, я возвращаю значение в виде строки.
[XmlElement("date")]
public string Date;
Что делает объявление намного проще. Но при попытке чтения из переменной вам необходимо предоставить нулевые проверки.
var foo = string.IsNullOrEmpty(Date) ? Convert.ToDateTime(Date) : (DateTime?) null
Он работает точно так же, как и в предыдущей реализации, за исключением того, что проверки приведения и проверки нуля происходят в другом месте. Я хочу написать свою модель, а потом забыть об этом, поэтому я все же предпочитаю свою реализацию вместо этого.
В другой заметке я добавил исправление в приведение перед редактированием: DateTime
должно быть DateTime?
.