Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列化的XML日期时间值不正确_C#_Xml - Fatal编程技术网

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

C# 序列化的XML日期时间值不正确,c#,xml,C#,Xml,我对序列化XML有一个问题。我有一个具有DateTime属性的对象,其中毫秒值为990。但是,当我查看输出的字符串时,它显示如下 <ReadingsDateTime>2016-07-04T10:10:00.99Z</ReadingsDateTime> .990与.99相同,它是一个小数,因此最后的0位被删除。数字的重要性从左手边开始到右手边。例如: 1.0000与1的值相同 2.94与2.940或2.9400或2.94000的值相同 序列化程序只删除后面的0位数字。

我对序列化XML有一个问题。我有一个具有DateTime属性的对象,其中毫秒值为990。但是,当我查看输出的字符串时,它显示如下

<ReadingsDateTime>2016-07-04T10:10:00.99Z</ReadingsDateTime>

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

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

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

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

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

序列化程序只删除后面的0位数字。如果要始终捕获任何尾随的0位数字(不确定为什么),可以添加自定义字符串属性,并指定要在其中序列化和读取的确切输出,同时忽略DateTime属性,请参见前面的示例。

这是一个特定于.Net的“东西”吗。创建xml以发布到Api。如果该系统是Java,他们会将毫秒部分也视为分数吗?@Hyder-这不是.net特有的,但这正是
XmlSerializer
序列化毫秒值的分数部分的方式,这很有意义,因为后面的
0
s不会添加任何有价值的内容。结果可能会有所不同,具体取决于序列化程序用户和编写它的用户,但字符串/序列化值应该能够以任何方式解析/反序列化回相同的DateTime值。就Java而言,我猜是一样的,但我不懂Java,所以不能肯定。这是一个特定于.Net的“东西”吗。创建xml以发布到Api。如果该系统是Java,他们会将毫秒部分也视为分数吗?@Hyder-这不是.net特有的,但这正是
XmlSerializer
序列化毫秒值的分数部分的方式,这很有意义,因为后面的
0
s不会添加任何有价值的内容。结果可能会有所不同,具体取决于序列化程序用户和编写它的用户,但字符串/序列化值应该能够以任何方式解析/反序列化回相同的DateTime值。至于Java,我想是一样的,但我不懂Java,所以不能肯定。
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;