首页 > 解决方案 > C# XML 反序列化器不反序列化日期

问题描述

XMLC#. 我有以下内容XML

<?xml version="1.0" encoding="utf-8"?>
<head>
  <person>
    <name>Jim Bob</name>
    <dateOfBirth>1990-01-01</dateOfBirth>
  </person>
  <policy>
    <number>1</number>
    <pet>
      <name>Snuffles</name>
      <dateOfBirth>2000-01-01</dateOfBirth>
    </pet>
  </policy>
</head>

有了这个,我试图将它映射到以下类:

public class head
{
    public policy policy { get; set; }
    public person person { get; set; }
}

public class person
{
    public string name { get; set; }
    public DateTime dateOfBirth { get; set; }

    [XmlElement("policy")]
    public List<policy> policy { get; set; }
}

public class policy
{
    public string number { get; set; }
    [XmlElement("pet")]
    public List<pet> pet { get; set; }
}

public class pet
{
    public string name { get; set; }
    [XmlElement("dateOfBirth")]
    public DateTime dateOfBirth { get; set; } //<~~ Issue is with this property
}

问题是反序列化时没有填充类中的dateOfBirth属性,pet我不知道为什么。这是因为与类dateOfBirth中的属性命名冲突person吗?

标签: c#xmldeserialization

解决方案


尝试以下使用 ParseExact 的代码。如果您仍然遇到问题,您可能必须处理 DateTime 为 null 的情况:

    public class pet
    {
        public string name { get; set; }
        private DateTime _dateOfBirth { get; set; } //<~~ Issue is with this property

        [XmlElement("dateOfBirth")]
        public string DateOfBirth
        {
            get { return _dateOfBirth.ToString("yyyy-MM-dd"); }
            set { _dateOfBirth = DateTime.ParseExact(value, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); }
        }


    }

推荐阅读