【发布时间】:2013-03-06 15:38:00
【问题描述】:
我使用XmlSerializer 来序列化包含日期时间属性的对象。
这个序列化很好,下面是一个产生结果的例子:
<GuestUserLinkItemActivity>
<ActivityDateTime>2013-03-06T00:00:00+00:00</ActivityDateTime>
<ActivityMessage>Invitation email sent to guest.</ActivityMessage>
</GuestUserLinkItemActivity>
但是当我尝试反序列化时,再次使用XmlSerializer,我得到以下错误
字符串“2013-03-06T00:00:00 00:00”不是有效的 AllXsd 值。 xmlserializer 反序列化
我发现有几篇帖子存在类似问题,但没有提供解决方案。
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; }
}
序列化器类:
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);
【问题讨论】:
-
请发布您尝试序列化/反序列化的类的代码
-
仅供参考,您的流和 StreamReader 对象应位于
using块中。
标签: c# .net xml-serialization xmlserializer