序列化的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;

序列化的XML日期时间值不正确

.990与.99相同,它是一个小数,因此最后一位0将被删除。数字从左手边开始到右手边都很重要。示例:

  • 1.0000与1的值相同
  • 2.94是与2.940或2.9400或2.94000相同的值

序列化程序只删除尾随的0位数字。如果您想始终捕获任何尾随的0位数字(不确定为什么要捕获),您可以添加一个自定义字符串属性,并在其中指定要序列化和读取的确切输出,并忽略DateTime属性,请参阅上一篇SO文章作为示例。