C# 反序列化到TimeSpan时需要duration元素
这是我关于堆栈溢出的第一个问题。所以我为我这边的任何错误行为道歉 我必须反序列化一些XML,其中一个元素是必需的,数据类型为xs: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
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方法工作:(您有什么建议吗?