2012-04-06 13 views
0

我似乎無法弄清以下問題,並試圖儘可能多地使用這裏的可用主題。XML反序列化和值賦值問題

我有以下文檔。

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

我寫了類和一個函數來反序列化它。

類:

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

而且功能:

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

     } 
    } 

要開始我得到的錯誤,它不能隱式轉換 '根' 到 '包'。

而且我需要一種方法來分配讀取的值(例如GWT_「value」)來表示標籤。 正如你所看到的,有多個'包'的值,所以我需要一個函數在這些包之間切換。

感謝您的幫助!

+0

工作對我來說,你試過一些串行化(虛擬)的數據,以驗證您有正確的屬性生成的XML? (哎呀,甚至值得做單元測試) – 2012-04-06 10:02:35

回答

0

此使用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;} 
}