簡體   English   中英

C#xml使用XmlIgnore進行序列化和反序列化問題

[英]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屬性。

我可以使用同一類進行序列化和反序列化嗎?

反序列化時,永遠不會為您的FromDateTimeToDateTime分配值。

您在cal屬性中設置的值對傳遞給它們的值沒有任何作用。

var a = fromDateTime.Subtract(DateTime.Today).Days;
            a = value;

該行將值和計算值保留在該塊中,但從不轉發計算值。

我會猜測並說出您想要的是什么:

var a = value.Subtract(DateTime.Today).Days;
            ToDateTime = a;

但隨后您將遇到一個問題。 當獲得ToDateTimeCalFromDateTimeCal的值時,將對已經計算出的值再次運行相同的計算。 由於您在計算中使用的是當前日期,並且您從未將該日期保存在文件中,因此您無法通過反轉值來確定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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM