You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 10中如何用XmlSerializer反序列化特定格式的DateOnly/DateTime?

解决特定格式DateOnly/DateTime的XML反序列化问题

当XML接口返回dd.MM.yyyy格式的日期(比如<ShipDate>31.10.2022</ShipDate>)时,默认XmlSerializer无法识别该格式,会返回默认日期值(1/1/0001)。以下是针对DateTime和DateOnly类型的具体解决方法:

一、处理DateTime类型

最直接的方案是使用代理属性,通过字符串属性中转XML值并完成格式转换:

using System.Globalization;
using System.Xml.Serialization;

public class Order
{
    // 标记为不参与XML序列化,仅作为业务使用的属性
    [XmlIgnore]
    public DateTime ShipDate { get; set; }

    // 对应XML中的<ShipDate>节点,负责接收和转换日期字符串
    [XmlElement("ShipDate")]
    public string ShipDateString
    {
        get => ShipDate.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
        set
        {
            // 严格按照指定格式解析,避免地区文化影响
            if (DateTime.TryParseExact(value, "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
            {
                ShipDate = date;
            }
            else
            {
                // 可根据需求添加格式错误的处理逻辑,比如抛出异常或设置默认值
                throw new FormatException($"日期格式错误:{value},需符合dd.MM.yyyy格式");
            }
        }
    }
}

二、处理DateOnly类型(.NET 6+)

DateOnly是.NET 6新增的类型,默认XmlSerializer不支持其序列化/反序列化,同样可以用代理属性解决:

using System.Globalization;
using System.Xml.Serialization;

public class Order
{
    [XmlIgnore]
    public DateOnly ShipDate { get; set; }

    [XmlElement("ShipDate")]
    public string ShipDateString
    {
        get => ShipDate.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
        set
        {
            if (DateOnly.TryParseExact(value, "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
            {
                ShipDate = date;
            }
            else
            {
                throw new FormatException($"日期格式错误:{value},需符合dd.MM.yyyy格式");
            }
        }
    }
}

注意事项

  • 必须指定CultureInfo.InvariantCulture,避免不同地区的日期格式解析规则干扰(比如部分地区用MM/dd/yyyy)。
  • 若需要全局统一处理该格式的日期,可以自定义实现IXmlSerializable接口的包装类,但代理属性的方式更轻量,适合大多数场景。

内容的提问来源于stack exchange,提问作者khteh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:35:58