![](/img/trans.png)
[英]“Property 'System.DateTime Date' is not defined for type 'System.Nullable`1[System.DateTime]' (Parameter 'property')” exception
[英]Serialize Complex Type System.Nullable<System.DateTime>
我想序列化DateTime,以便當DateTime為null時,我不會得到標簽本身。
我還設置了上面指定的布爾值,但是我的問題是DateTime是值類型,它永遠不會為null,因此指定的布爾值始終為true。
我什至嘗試將DateTime替換為System.Nullable,但是在發送請求或從WebService接收響應時出現序列化錯誤。
有什么辦法嗎?
看到這個問題 ,馬克給出了一個很好的答案。 只需將ShouldSerializeMyDateTime
方法添加到您的類中:
public bool ShouldSerializeMyDateTime()
{
return MyDateTime.HasValue;
}
顯然,這是XML序列化的未記錄功能...您還可以使用名為MyDateTimeSpecified
的屬性
您可能需要實現IXmlSerializable
並手動序列化類型,然后才能使用Nullable<DateTime>
。 這是一個例子:
public class MyData : IXmlSerializable
{
public Nullable<DateTime> MyDateTime { get; set; }
public void WriteXml(XmlWriter writer)
{
if (this.MyDateTime.HasValue)
{
writer.WriteStartElement("MyDateTime");
writer.WriteValue((DateTime)this.MyDateTime);
writer.WriteEndElement();
}
}
public void ReadXml(XmlReader reader)
{
if (reader.ReadToDescendant("MyDateTime"))
{
this.MyDateTime = reader.ReadElementContentAsDateTime();
}
}
public XmlSchema GetSchema()
{
return null;
}
}
使用這個:
MyData md = new MyData { MyDateTime = null };
XmlSerializer ser = new XmlSerializer(typeof(MyData));
using (var writer = XmlWriter.Create(@"d:\temp\test.xml"))
{
ser.Serialize(writer, md);
}
using (var reader = XmlReader.Create(@"d:\temp\test.xml"))
{
md = (MyData)ser.Deserialize(reader);
WL(md.MyDateTime.HasValue);
}
將第一行更改為MyDateTime = DateTime.Now
以查看其他行為。 這將根據XML中是否存在MyDateTime值進行寫入和讀取:
<?xml version="1.0" encoding="utf-8"?>
<MyData />
<?xml version="1.0" encoding="utf-8"?>
<MyData>
<MyDateTime>2009-08-06T10:10:14.8311049+01:00</MyDateTime>
</MyData>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.