C# 序列化的XML日期时间值不正确
我对序列化XML有一个问题。我有一个具有DateTime属性的对象,其中毫秒值为990。但是,当我查看输出的字符串时,它显示如下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位数字。
<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;