如何在c#中将xml日期值序列化为DateTime类

时间:2015-12-09 20:22:21

标签: c# xml

我正在传递以下xml

<PolicyNumber>6456365A1</PolicyNumber>
<EffectiveDate>2015-10-01T00:00:00</EffectiveDate>
<ExpirationDate>2016-10-01T00:00:00</ExpirationDate>

通过fiddler post来分类。但是下面的类中的值

    [DataContract]
    public class Parameter
    {
        [DataMember]
        public string PolicyNumber { get; set; }
        [DataMember] 
        public DateTime EffectiveDate { get; set; }
        [DataMember]
        public DateTime ExpirationDate { get; set; }
    }

策略编号的值按预期传递.DateTime的值未传递,而是具有默认值。我使用fiddler将它发布到web api mvc。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以简单地将其设为仅用于序列化的私有成员。

[DataContract]
public class AutoIDCardParameter
{
    [DataMember(Name = "PolicyNumber")]
    public string PolicyNumber;

    [DataMember(Name = "EffectiveDate")]
    private string _EffectiveDate {
        get {
            return EffectiveDate.ToString("yyyy-MM-DDTHH:mm:ss");
        }
        set {
            DateTime.TryParse(value, out EffectiveDate);
        }
    }

    public DateTime EffectiveDate;

    // ....
}

答案 1 :(得分:1)

这里的顺序错了。 DataContractSerializer将使用字母顺序,除非您另行指定(请参阅the docs),因此期望EffectiveDateExpirationDate,然后PolicyNumber

您需要重新排列XML以使其符合顺序,或者您需要通过属性指定类的顺序:

[DataContract]
public class Parameter
{
    [DataMember(Order = 0)]
    public string PolicyNumber { get; set; }
    [DataMember(Order = 1)]
    public DateTime EffectiveDate { get; set; }
    [DataMember(Order = 2)]
    public DateTime ExpirationDate { get; set; }
}