c# - 使用 XmlSerializer 序列化 DataType ="time"字段

标签 c# .net xml xml-serialization

我在使用 XmlSerializer 序列化 DateTime 字段时得到了一个奇怪的结果。

我有以下类(class):

public class RecordExample
{
    [XmlElement("TheTime", DataType = "time")]
    public DateTime TheTime { get; set; }

    [XmlElement("TheDate", DataType = "date")]
    public DateTime TheDate { get; set; }

    public static bool Serialize(
        Stream stream, object obj, Type objType, Encoding encoding)
    {
        try
        {
            var settings = new XmlWriterSettings { Encoding = encoding };

            using (var writer = XmlWriter.Create(stream, settings))
            {
                var xmlSerializer = new XmlSerializer(objType);
                if (writer != null) xmlSerializer.Serialize(writer, obj);
            }

            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
}

当我通过以下测试代码调用 XmlSerializer 时:

var obj = new RecordExample 
{ 
    TheDate = DateTime.Now.Date, 
    TheTime = new DateTime(0001, 1, 1, 12, 00, 00) 
};

var ms = new MemoryStream();

RecordExample.Serialize(ms, obj, typeof(RecordExample), Encoding.UTF8);
txtSource2.Text = Encoding.UTF8.GetString(ms.ToArray());

我得到了一些奇怪的结果,这是生成的 xml:

<?xml version="1.0" encoding="utf-8"?>
<RecordExample 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <TheTime>12:00:00.0000000+00:00</TheTime>
    <TheDate>2010-03-08</TheDate>
</RecordExample>

知道如何让“TheTime”元素包含看起来更像这样的时间:

<TheTime>12:00:00.0Z</TheTime>

...这就是我所期待的吗?

谢谢

戴夫

最佳答案

我自己遇到过不同的问题...但是我试图序列化一个 TimeSpan 对象。解决方案是拥有两个属性,一个包含 TimeSpan,另一个是已序列化的 TimeSpan 的字符串表示形式。这是模式:

[XmlIgnore]
public TimeSpan ScheduledTime
{
    get;
    set;
}

[XmlElement("ScheduledTime", DataType="duration")]
public string XmlScheduledTime
{
    get { return XmlConvert.ToString(ScheduledTime); }
    set { ScheduledTime = XmlConvert.ToTimeSpan(value); }
}

但是,使用此代码,时间将按以下格式打印出来:

<ScheduledTime>PT23H30M</ScheduledTime>

The W3C definition of duration is here which explains it .

关于c# - 使用 XmlSerializer 序列化 DataType ="time"字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402379/

相关文章:

c# - 如何在创建文件夹时移动文件。目录.方法等

c# - 使用 FirebirdClient 查询 Firebird 数据库模式

c# - 无法循环绘制到图片框

xml - 使用 XSL 将 XML 中的日期时间元素拆分为日期和时间

c# - Azure WebJobs 未找到函数

.net - 可以杀死/终止 Visual Studio 调试器中的某个线程吗?

c# - 通过看似不必要的字符串初始化来提升性能?

c# - 如何使用 C# 获取总线报告的设备描述

java - ph-schematron 验证错误消息

java - 在Spring Boot java中从数据库生成xml