C# 反序列化到TimeSpan时需要duration元素

C# 反序列化到TimeSpan时需要duration元素,c#,xml,deserialization,timespan,C#,Xml,Deserialization,Timespan,这是我关于堆栈溢出的第一个问题。所以我为我这边的任何错误行为道歉 我必须反序列化一些XML,其中一个元素是必需的,数据类型为xs:duration。关于如何对可选元素执行此操作,请访问,我使用它来构造: public class ValueWeightTime { private TimeSpan _value = new TimeSpan(); [XmlIgnore] public TimeSpan Value { get { return _value; } set

这是我关于堆栈溢出的第一个问题。所以我为我这边的任何错误行为道歉

我必须反序列化一些XML,其中一个元素是必需的,数据类型为xs:duration。关于如何对可选元素执行此操作,请访问,我使用它来构造:

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); }
    }
}

必需的属性不起作用。有谁知道如何使“Value”元素成为必需元素吗?

您可能正在寻找以下内容:

[DataMember(IsRequired = true)]
如果这不起作用,您可以这样做:

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

嗨,托尼,谢谢你的回复!不幸的是,它没有起作用。我仍然得到默认的时间跨度({00:00:00}),而不是一个错误。嗨,托尼,谢谢你的编辑!不幸的是,这仍然不起作用。调用XmlValue的getter,由于TimeSpan_值已初始化,XmlValue getter返回“PT0S”。所以好消息是,如果_值是可空的/可以用空值初始化,这肯定会起作用。我试图这样做,但无法使XmlConvert方法工作:(您有什么建议吗?