c# - 如何正确序列化 DateTime?

标签 c# xml datetime serialization

当我对 DateTime 字段(具有来自日期选择器的值)进行 XML 序列化时,日期始终序列化为

0001-01-01T00:00:00

即公元 1 月 1 日。为什么是这样?此外,当我尝试反序列化 XML 时,出现此错误:

startIndex 不能大于字符串的长度。
参数名称:startIndex。

但是,当我手动编辑 XML 时,反序列化在 1000-9999 年内正常进行,但在 <1000 年内却不行?

DateTime 属性具有 [XmlElement],就像所有其他正确序列化的字段一样,其余代码似乎没问题。提前致谢!

最佳答案

如果你想轻松地序列化它(并掌握它的序列化),使用代理字段。

[Serializable]
public class Foo
{
    // Used for current use
    [XmlIgnore]
    public DateTime Date { get; set; }

    // For serialization.
    [XmlElement]
    public String ProxyDate
    {
        get { return Date.ToString("<wanted format>"); }
        set { Date = DateTime.Parse(value); }
    }
}

编辑

以下代码:

[Serializable]
public class TestDate
{
    [XmlIgnore]
    public DateTime Date { get; set; }

    [XmlElement]
    public String ProxyDate
    {
        get { return Date.ToString("D"); }
        set { Date = DateTime.Parse(value); }
    }
}

public class Program
{
    static void Main(string[] args)
    {
        TestDate date = new TestDate()
        {
            Date = DateTime.Now
        };

        XmlSerializer serializer = new XmlSerializer(typeof(TestDate));
        serializer.Serialize(Console.Out, date);
    }
}

产生以下输出:

<?xml version="1.0" encoding="ibm850"?>
<TestDate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:
//www.w3.org/2001/XMLSchema">
  <ProxyDate>mardi 14 juin 2011</ProxyDate>
</TestDate>

关于c# - 如何正确序列化 DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328133/

相关文章:

c# - 检查变量何时等于另一个值的更好方法

由于命名空间为空,Python XPath lxml 无法读取 SVG 路径元素?

C# DateTime 到长转换关闭一秒

angularjs - Angular http 方法更改日期时间中的小时

python - Django IntegrityError 与 DateTimeField

c# - 尽管登录成功,ASP.NET 表单例份验证始终为 false

c# - 没有声明的 Lambda 表达式?

c# - 如何将方法标记为不需要测试? (ASP.NET, ReSharper)

xslt中的java函数getTime

xml - XSLT 替换值