2012-04-06 4 views
0

Ich kann nicht scheinen, das folgende herauszufinden, und ich habe versucht, die verfügbaren Themen hier so viel zu nutzen.XML Deserialisierung und Wert Zuordnung Problem

Ich habe das folgende Dokument.

<?xml version="1.0"?> 
<Root> 
    <Data> 
    <Package> 
     <GWT_></GWT_> 
     <ALT_></ALT_> 
     <SAT__></SAT__> 
    </Package> 
    <Package> 
     <GWT_></GWT_>  
     <ALT_></ALT_> 
     <SAT__></SAT__> 
    </Package> 
    </Data> 
</Root> 

Ich schrieb Klassen und eine Funktion, um alles zu deserialisieren.

Klassen:

[Serializable()] 
public class Package 
{ 
    [System.Xml.Serialization.XmlElement("GWT_")] 
    public string GWT_ { get; set; } 

    [System.Xml.Serialization.XmlElement("ALT_")] 
    public string ALT_ { get; set; } 

    [System.Xml.Serialization.XmlElement("SAT__")] 
    public string SAT__ { get; set; } 
} 

[Serializable()] 
[System.Xml.Serialization.XmlRoot("Root")] 
public class Root 
{ 
    [System.Xml.Serialization.XmlArray("Data")] 
    [System.Xml.Serialization.XmlArrayItem("Package", typeof(Package))] 
    public Package[] Package { get; set; } 
} 

Und die Funktion:

private void dataReportToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog openData = new OpenFileDialog(); 
     openData.Filter = "Eta file|Data_*.dat 
     if (DialogResult.OK == openData.ShowDialog()) 
     { 
      Package package = null; 
      string path = openData.FileName; 

      XmlSeriallizerSerializer(typeof(Root)); 

      StreamReader reader = new StreamReader(path); 
      package = (Root)serializer.Deserialize(reader); 
      reader.Close();   

     } 
    } 

starten ich den Fehler, dass sie nicht implizit 'Root' auf 'Paket' umwandeln kann.

Und ich brauche eine Möglichkeit, die Werte, die gelesen werden (z. B. GWT_ "Wert") zuzuweisen, sagen wir ein Etikett. Wie Sie sehen können, gibt es mehrere "Pakete" von Werten, also brauche ich eine Funktion, um zwischen diesen Paketen hin- und herzuschalten.

Danke für jede Hilfe!

+0

mit Haben Sie einige (Dummy) Daten versucht, Serialisierung, um zu überprüfen, dass Sie das Recht haben Attribute, die XML zu generieren? (Verdammt, es lohnt sich sogar, dies als Unit Test zu machen) –

Antwort

0

Dies funktioniert für mich LINQPad

void Main() 
{ 
    using(var stream = File.Open(@"test.xml", FileMode.Open)) 
    { 
     var serializer = new XmlSerializer(typeof(Root)); 

     var root = (Root)serializer.Deserialize(stream); 

     root.Dump(); 
    } 
} 

public class Package 
{ 
    public string GWT_ { get; set; } 
    public string ALT_ { get; set; } 
    public string SAT__ { get; set; } 
} 

public class Data 
{ 
    [XmlElement("Package")] 
    public Package[] Package { get; set; } 
} 

public class Root 
{ 
    public Data Data{get;set;} 
}