如何讓XsdDataContractExporter爲我的DateTime字段使用xs:time類型?如何指導DataContract使用DateTime或TimeSpan字段的xs:time?
我需要能夠使用DataContract序列化在我的代碼中反序列化HH:mm:ss格式的字符串(例如「21:59:59」)。使用數據類型DateTime並適當標記時,這不是問題:
[DataContract]
public class TestClass
{
[DataMember(Name = "Begin")]
public DateTime TimeField;
}
序列化和反序列化工作正常。 現在我需要能夠XSD驗證字符串中的自動生成從類型爲xsd:因爲XsdDataContractExporter使用XS
XsdDataContractExporter xsdExp = new XsdDataContractExporter();
xsdExp.Export(typeof(T));
XmlSchemaSet xsdSet = xsdExp.Schemas;
var xDoc = XDocument.Load(stringReader);
xDoc.Validate(xsdSet, null);
驗證失敗:DateTime類型的日期時間,我得到以下錯誤:
Additional information: The 'Begin' element is invalid - The value '05:00:00' is invalid according to its datatype ' http://www.w3.org/2001/XMLSchema:dateTime ' - The string '05:00:00' is not a valid DateTime value.
使用TimeSpan也無濟於事 - 因爲隨後XsdDataContractExporter使用xs:duration(並且DataContractDeserializer無法從HH:mm:ss字符串反序列化TimeSpan)。
有沒有辦法如何繼續使用DataContractSerializer和XsdDataContractExporter並能夠反序列化這些字符串?我們使用幾十個和幾十個複雜的設置類型和xmls - 這是這些utils失敗的唯一情況(所以我想避免爲所有類型寫入自定義驗證和反序列化)
我是使用字符串數據類型的唯一想法 - 放鬆XSD驗證,然後在OnDeserialized方法反序列化。這是非常醜陋的黑客:/ – Jan