2017-01-24 6 views
0

это мой первый вопрос о переполнении стека. Так что я извиняюсь за любые проступки с моей стороны!Требуется элемент длительности при десериализации на TimeSpan

Мне нужно десериализовать некоторый XML, требуется один из элементов и тип данных xs: duration. Как это сделать для дополнительных элементов можно найти в http://kennethxu.blogspot.nl/2008/09/xmlserializer-doesn-serialize-timespan.html, который я использовал для построения:

public class ValueWeightTime 
{ 
    private TimeSpan _value = new TimeSpan(); 

    [XmlIgnore] 
    public TimeSpan Value { get { return _value; } set { _value = value; } } 

    [Required] //ToDo: fix default value PT0S 
    [XmlElement(ElementName = "Value", DataType = "duration")] 
    public string XmlValue 
    { 
     get { return XmlConvert.ToString(_value); } 
     set { _value = XmlConvert.ToTimeSpan(value); } 
    } 
} 

Атрибут Обязательный не работает. Кто-нибудь знает, как сделать элемент «Значение» обязательным?

ответ

0

Вы можете искать это:

[DataMember(IsRequired = true)] 

Если это не работает, вы можете сделать это:

[XmlIgnore] 
public TimeSpan Value 
{ 
    get 
    { 
     if(String.IsNullOrEmpty(XmlValue)) 
      throw new AgrumentException("Value is required."); 
     return _value; 
    } 
    set { _value = value; } 
} 
+0

Привет Тони, Thnx за ответ! К сожалению, это не сработало. Я по-прежнему получаю по умолчанию TimeSpans ({00:00:00}) вместо ошибки. – Yuri

+0

Привет, Tony, thnx для вашего редактирования! К сожалению, это все еще не работает. Вызывается получатель XmlValue, и поскольку значение параметра TimeSpan _ initialue инициализируется, получатель XmlValue возвращает «PT0S». Поэтому хорошая новость заключается в том, что это определенно сработает, если _value будет нулевым/может быть инициализировано нулевым значением. Я пытался это сделать, но не смог заставить XmlConvert-методы работать :( У вас есть предложения? – Yuri