[英]C# xml Serialize with XmlIgnore and Deserialize problem
您好,我對XML反序列化有疑問
首先我有這樣的課
public class ReportsViewModel
{
private DateTime fromDateTime;
[XmlIgnore]
public DateTime FromDateTime
{
get { return fromDateTime; }
set
{
fromDateTime = value;
}
}
[XmlElement]
public int FromDateTimeCal
{
get
{
return fromDateTime.Subtract(DateTime.Today).Days;
}
set
{
var a = fromDateTime.Subtract(DateTime.Today).Days;
a = value;
}
}
private DateTime toDateTime;
[XmlIgnore]
public DateTime ToDateTime
{
get { return toDateTime; }
set
{
toDateTime = value;
}
}
[XmlElement]
public int ToDateTimeCal
{
get
{
return ToDateTime.Subtract(DateTime.Today).Days;
}
set
{
var a = ToDateTime.Subtract(DateTime.Today).Days;
a = value;
}
}
}
然后我序列化它們
ReportsViewModel reportVM = new ReportsViewModel();
reportVM.FromDateTime = new DateTime(2019, 02, 18);
reportVM.ToDateTime = new DateTime(2019, 02, 22);
using (StreamWriter sw = new StreamWriter(@"D:\Temp\Report.xml"))
{
XmlSerializer xml = new XmlSerializer(typeof(ReportsViewModel));
xml.Serialize(sw, reportVM);
}
現在,我獲得僅包含FromDateTimeCal和ToDateTimeCal的XML文件
但是問題是當我反序列化它們時開始的。
我對ReportViewModel類使用反序列化
using (StreamReader sw = new StreamReader(@"D:\Temp\Report.xml"))
{
XmlSerializer xml = new XmlSerializer(typeof(ReportsViewModel));
ReportsViewModel reportVM = (ReportsViewModel)xml.Deserialize(sw);
reportVM.Dump();
reportVM.FromDateTimeCal.Dump();
reportVM.ToDateTimeCal.Dump();
}
沒用 我猜問題是沒有設置FromDateTime和ToDateTime屬性。
我可以使用同一類進行序列化和反序列化嗎?
反序列化時,永遠不會為您的FromDateTime和ToDateTime分配值。
您在cal屬性中設置的值對傳遞給它們的值沒有任何作用。
var a = fromDateTime.Subtract(DateTime.Today).Days;
a = value;
該行將值和計算值保留在該塊中,但從不轉發計算值。
我會猜測並說出您想要的是什么:
var a = value.Subtract(DateTime.Today).Days;
ToDateTime = a;
但隨后您將遇到一個問題。 當獲得ToDateTimeCal和FromDateTimeCal的值時,將對已經計算出的值再次運行相同的計算。 由於您在計算中使用的是當前日期,並且您從未將該日期保存在文件中,因此您無法通過反轉值來確定FromDateTime是什么。 除非您從文件本身讀取日期。 相反,序列化FromDateTime會更有意義。 但是,如果不需要計算中使用的原始日期,則可以執行以下操作:
[XmlIgnore]
public DateTime FromDateTime
{
get { return fromDateTime; }
set
{
fromDateTime = value;
}
}
[XmlElement]
public int FromDateTimeCal
{
get
{
return fromDateTime.Subtract(DateTime.Today).Days;
}
set
{
fromDateTime = DateTime.Today.AddDays(value);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.