C#XML反序列化器未反序列化日期

时间:2018-11-10 16:41:40

标签: c# xml deserialization

我在SignUp中进行XML反序列化时遇到麻烦。 我有以下C#

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属性的命名冲突吗?

2 个答案:

答案 0 :(得分:0)

尝试以下使用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); }
        }


    }

答案 1 :(得分:0)

我设法通过使用[XmlElementAttribute(DataType = "date")]字段上的dateOfBirth属性来解决此问题。修改后的类有效,如下所示:

public class pet
{
    public string name { get; set; }
    [XmlElementAttribute(DataType = "date")]
    public DateTime dateOfBirth { get; set; }
}