Я намагаюся десеріалізувати XML-об'єкт з наступним вузлом:
<startTime>2012-03-19T11:31:03.000Z</startTime>
<endTime>2012-03-19T11:31:03.000Z</endTime>
Це властивості класу, які я використовую для десеріалізації XML у:
[System.Xml.Serialization.XmlElementAttribute(DataType = "date", ElementName = "startTime")]
public DateTime StartTime { get; set; }
[System.Xml.Serialization.XmlElementAttribute(DataType = "date", ElementName = "endTime")]
public DateTime EndTime { get; set; }
Нарешті, це код, який я використовую для десеріалізації XML:
Stream resultStream = await response.Content.ReadAsStreamAsync();
var serializer = new XmlSerializer(typeof(T));
return serializer.Deserialize(resultStream) as T;
Однак код викине виняток,вказуючи, що рядок не був розпізнаний як дійсний об'єкт DateTime - з базовим виключенням, що файл XML має помилки в (1,1926), які вказують безпосередньо на дві мітки часу.
Все, що я, здається, знаходжу щодо цієї помилкиповідомлення викликано неправильним використанням форматів (тобто неправильних спеціальних символів, що використовуються у рядку дат). Однак у моєму випадку формат, здається, відповідає 100% опису MSDN.
Хто-небудь може допомогти мені вказати на помилку?
Відповіді:
2 для відповіді № 1Спробуйте скористатись "dateTime"
DataType
у ваших атрибутах - (спостерігайте за справою: починаючи з маленького d
):
[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "startTime")]
public DateTime StartTime { get; set; }
[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "endTime")]
public DateTime EndTime { get; set; }
1 для відповіді № 2
Ви намагаєтеся Deserialize a DateTime
використовуючи Time
формат, який не може працювати. Але ви не отримуєте повідомлення про помилку під час компіляції, оскільки DataType
це рядок
Слід спробувати:
[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "startTime")]
public DateTime StartTime { get; set; }
[System.Xml.Serialization.XmlElementAttribute(DataType = "dateTime", ElementName = "endTime")]
public DateTime EndTime { get; set; }