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

时间:2016-07-22 10:34:51

标签: c# xml

我遇到了序列化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;

1 个答案:

答案 0 :(得分:3)

.990与.99相同,它是一个小数,所以最后的0位被删除。数字从左侧开始向右侧重要。示例:

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

序列化程序只删除尾随的0位数。如果你想总是捕获任何尾随的0位数(不知道你为什么会这样),你可以添加一个自定义字符串属性并指定要序列化并在那里读取的确切输出并忽略DateTime属性,请参阅前面的SO post例如。