序列化的XML日期时间值不正确
本文关键字:不正确 时间 日期 XML 序列化 | 更新日期: 2023-09-27 17:58:16
我在序列化XML时遇到问题。我有一个具有DateTime属性的对象,其中毫秒值为990。然而,当我查看输出的字符串时,它显示如下。。。
<ReadingsDateTime>2016-07-04T10:10:00.99Z</ReadingsDateTime>
用于将其转换为xml的代码如下,发生了什么,我找不到发生这种情况的原因。
string xml;
try
{
var serializer = new XmlSerializerFactory().CreateSerializer(typeof(T), xmlNamespace);
using (var memoryStream = new MemoryStream())
{
var settings = new XmlWriterSettings
{
Indent = false,
NamespaceHandling = NamespaceHandling.OmitDuplicates,
CloseOutput = false,
WriteEndDocumentOnClose = true,
};
using (var xmlWriter = XmlWriter.Create(memoryStream, settings))
{
serializer?.Serialize(xmlWriter, obj);
}
memoryStream.Seek(0, SeekOrigin.Begin);
using (var steamReader = new StreamReader(memoryStream))
{
xml = steamReader.ReadToEnd();
}
}
}
catch (Exception ex)
{
throw new ApplicationException("Unable to convert to XML from an object", ex);
}
return xml;
.990与.99相同,它是一个小数,因此最后一位0将被删除。数字从左手边开始到右手边都很重要。示例:
- 1.0000与1的值相同
- 2.94是与2.940或2.9400或2.94000相同的值
序列化程序只删除尾随的0位数字。如果您想始终捕获任何尾随的0位数字(不确定为什么要捕获),您可以添加一个自定义字符串属性,并在其中指定要序列化和读取的确切输出,并忽略DateTime属性,请参阅上一篇SO文章作为示例。