2012-04-06 8 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_ «значение»), чтобы сказать метку. Как вы можете видеть, существует несколько «пакетов» значений, поэтому мне нужна функция для переключения между этими пакетами.

Спасибо за помощь!

+0

Вы пробовали serialising некоторые данные (фиктивные), чтобы убедиться, что у вас есть право атрибуты для создания XML? (Черт, это даже стоит делать это как единичный тест) –

ответ

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;} 
} 
Смежные вопросы