Im использует XmlSerializer
для сериализации объектов, которые содержат свойство datetime.Ошибка даты сериализации XMLSerializer: недействительно AllXsd
Это serialises прекрасно со следующим примером результатов производства:
<GuestUserLinkItemActivity>
<ActivityDateTime>2013-03-06T00:00:00+00:00</ActivityDateTime>
<ActivityMessage>Invitation email sent to guest.</ActivityMessage>
</GuestUserLinkItemActivity>
Но тогда, когда я пытаюсь и deserialise, снова используя XmlSerializer
, это я получаю следующую ошибку
Строка ' 2013-03-06T00: 00: 00 00:00 'не является допустимым значением AllXsd. xmlserializer Deserialize
Есть несколько сообщений, которые я нашел с похожими проблемами, но не обеспечил решение этого.
XmlSerializer: The string '' is not a valid AllXsd value
The string '3/18/09 10:16 PM' is not a valid AllXsd value
Это, скорее всего, чтобы сделать с датой, хранятся в формате, не ожидается, и от одной из статей не в формате, ожидаемом в спецификации XML. поэтому я ожидаю, что если вручную изменить сохраненную дату, я могу заставить ее десериализировать ее должным образом.
Как я могу правильно сохранить даты, используя XmlSerializer
.
Смотрите биты копии и вставили код ниже:
public class GuestUserLinkItemActivity
{
public DateTime ActivityDateTime { get; set; }
public string ActivityMessage { get; set; }
}
Serializer класс:
public static class Serializer
{
public static T DeSerialise<T>(string contentsToDesrialise)
{
if (string.IsNullOrEmpty(contentsToDesrialise))
return default(T);
var xmlSer = new XmlSerializer(typeof(T));
var stream = new MemoryStream();
var sw = new StreamWriter(stream);
sw.Write(contentsToDesrialise);
sw.Flush();
stream.Position = 0;
var obj = (T)xmlSer.Deserialize(stream);
sw.Close();
stream.Close();
return obj;
}
public static string Serialise<T>(T obectToSerialise)
{
var ms = new MemoryStream();
var sr = new XmlSerializer(typeof(T));
sr.Serialize(ms, obectToSerialise);
ms.Position = 0;
var sread = new StreamReader(ms);
var serialisedObjectString = sread.ReadToEnd();
sread.Close();
ms.Close();
return serialisedObjectString;
}
}
Использование:
var guestHistoryList = new List<GuestUserLinkItemActivity>();
guestHistoryList.Add(new GuestUserLinkItemActivity(){
ActivityDateTime = DateTime.Now,
ActivityMessage = "Invitation email sent to guest."}
);
var serialisedArray = Serializer.Serialise<GuestUserLinkItemActivity[]>(guestHistoryList.ToArray());
var deserialisedObject = Serializer.DeSerialise<GuestUserLinkItemActivity[]>(serialisedArray);
Укажите код класса (ов), который вы пытаетесь выполнить сериализацией/десериализацией –
FYI, ваши потоки и объекты StreamReader должны быть в блоках 'using'. –