C# xml Serialize with XmlIgnore and Deserialize 问题
C# xml Serialize with XmlIgnore and Deserialize problem
你好我有反序列化的问题xml
首先我有 class 这样的
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);
}
现在我得到 XML 只包含 FromDateTimeCal 和 ToDateTimeCal 的文件
但是当我反序列化它们时问题就开始了。
我使用 ReportViewModel 进行反序列化 class
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 属性 没有设置。
我可以使用相同的序列化和反序列化 class 吗?
你的 FromDateTime 和 ToDateTime 在反序列化时永远不会被赋值..
你的 set 在你的 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);
}
}
你好我有反序列化的问题xml
首先我有 class 这样的
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);
}
现在我得到 XML 只包含 FromDateTimeCal 和 ToDateTimeCal 的文件
但是当我反序列化它们时问题就开始了。
我使用 ReportViewModel 进行反序列化 class
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 属性 没有设置。
我可以使用相同的序列化和反序列化 class 吗?
你的 FromDateTime 和 ToDateTime 在反序列化时永远不会被赋值..
你的 set 在你的 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);
}
}