gpt4 book ai didi

c# - XMLSerializer 序列化日期错误 : Is not a valid AllXsd

转载 作者:行者123 更新时间:2023-11-30 17:55:14 24 4
gpt4 key购买 nike

我正在使用 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);

最佳答案

与其尝试序列化/反序列化数组,不如尝试使用 List<GuestUserLinkItemActivity> - 它对我有用:

var serialisedArray = Serializer.Serialise<List<GuestUserLinkItemActivity>>(guestHistoryList);
var deserialisedObject1 = Serializer.DeSerialise<List<GuestUserLinkItemActivity>>(serialisedArray);

关于c# - XMLSerializer 序列化日期错误 : Is not a valid AllXsd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15251570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com