2011-03-10 202 views
1

我有一个XML文件,该文件的格式如下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;}} 

    } 

回答

3

你的类可以留为是的(显然你应该改变数据类型为合适的) - 因为你有嵌套在你的XML中(这意味着可以有多个)rundate我建议添加一个收集离子类,如下所示:

[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

+0

非常感谢..它真的有很大帮助.. – Lemuel 2011-03-10 07:00:54

2

我会设计类,像这样:

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); 
    } 
}