簡體   English   中英

XML反序列化

[英]XML Deserialization

我有一個這種格式的xml文件

"<rundate>

  <rundateItem>
    <LeaveCreditingMonth>2</LeaveCreditingMonth>
    <LeaveCreditingYear>2010</LeaveCreditingYear>
    <IncludeNoTimesheet>True</IncludeNoTimesheet>
  </rundateItem>

</rundate>"

如果我想反序列化該xml文件,反序列化的類或目標對象的格式應該是什么? 目前,我的課程如下所示:

public class rundate
    {

        string _leaveCreditingMonth;
        string _leaveCreditingYear;
        string _includeNoTimesheet;

        public string LeaveCreditingMonth {get{return _leaveCreditingMonth;}set{ _leaveCreditingMonth = value;}}
        public string LeaveCreditingYear {get{return _leaveCreditingYear;}set{ _leaveCreditingYear = value;}}
        public string IncludeNoTimesheet {get{return _includeNoTimesheet;}set{ _includeNoTimesheet = value;}}

    }

你的類可以繼續擔任是(很明顯,你應該改變的數據類型,雖然是合適的) -因為你已經rundate嵌套在你的XML(這意味着可能有不止一個)我會建議增加一個集合類,如下所示:

[XmlRoot("rundate")]
public class RundateCollection
{
    [XmlElement("rundateItem")]
    public List<rundate> Rundates { get; set; }
}

您可以使用XML測試序列化/反序列化類,如下所示:

XmlSerializer serializer = new XmlSerializer(typeof(RundateCollection));
StringWriter sw = new StringWriter();
rundate myRunDate = new rundate() { LeaveCreditingMonth = "A", IncludeNoTimesheet = "B", LeaveCreditingYear = "C" };
RundateCollection ra = new RundateCollection() { Rundates = new List<rundate>() { myRunDate } };
serializer.Serialize(sw, ra);
string xmlSerialized = sw.GetStringBuilder().ToString();
string xml = File.ReadAllText(@"test.xml");
StringReader sr = new StringReader(xml);
var rundateCollection = serializer.Deserialize(sr);

您將看到該收集類已成功從XML反序列化,並且包含一個runlist類型的列表項。

我會像這樣設計課程:

public class Rundate
    {

        public int LeaveCreditingMonth { get; set;}
        public int LeaveCreditingYear { get; set; }
        public bool IncludeNoTimesheet { get; set; }

    }

然后,您可以像這樣反序列化它:

var serializer = new XmlSerializer(typeof(List<Rundate>));
using (var fs = new FileStream("yourfile.xml", FileMode.Open))
{
    using (var reader = new XmlTextReader(fs))
    {
        var rundates = (List<Rundate>)serializer.Deserialize(reader);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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