2015-12-09 2 views
0

Я передаю следующий XMLКак сериализовать значение даты XML в класс DateTime в C#

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

в класс через стельку post.But значения в следующем классе

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

Значение номер политики прошел, как и ожидалось. Значение для DateTime не передается, а имеет значение по умолчанию. Я отправляю его с помощью скрипача в web api mvc.

enter image description here

+0

Не могли бы вы показать нам код десериализации? А также почему вы не поместили атрибут DataMember в дату вступления в силу? Работает ли 'ExpirationDate'? –

+0

У вас нет допустимого xml-файла. XML должен иметь идентификационную строку и иметь только один корневой тег. Перед де-сериализацией вам нужно обернуть данные xml, которые вы получаете, с идентификационной линией и корневой вкладкой. – jdweng

+0

Срок годности также не работает – CuriousDev

ответ

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; 

    // .... 
} 
+0

Нет его работы. Я уже пробовал это. – CuriousDev

+0

Я забыл названия имен данных. –

0

Порядок здесь неправильный. DataContractSerializer будет использоваться в алфавитном порядке, если вы не укажете иное (см. the docs), поэтому он ожидает EffectiveDate, ExpirationDate, а затем 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; } 
} 
Смежные вопросы