2011-03-10 4 views
1

J'ai un fichier xml qui est dans ce formatXML Désérialisation

"<rundate> 

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

</rundate>" 

dans le cas où je veux désérialiser ce fichier xml, ce qui devrait être le format de la classe ou l'objet cible de mon désérialisation? semble actuellement ma classe comme ceci:

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

    } 

Répondre

3

Votre classe peut rester aussi est (bien sûr, vous devriez changer les types de données pour être approprié si) - puisque vous avez rundate imbriqué dans votre XML (ce qui implique qu'il peut y en avoir plus d'un), je suggère d'ajouter une collecte classe ion comme suit:

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

Vous pouvez tester sérialisation/désérialisation votre classe avec votre XML comme suit:

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

Vous verrez que la classe de collection avec succès désérialisée de votre XML et contient une liste article de type runlist.

+0

Merci beaucoup .. ça aide vraiment beaucoup .. – Lemuel

2

Je concevoir la classe comme ceci:

public class Rundate 
    { 

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

    } 

Ensuite, vous pouvez désérialiser comme ceci:

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