[英]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.