XML反序列化和值分配问题

本文关键字:分配 问题 反序列化 XML | 更新日期: 2023-09-27 18:30:07

我似乎无法理解以下内容,我已经尽力利用这里的可用主题。

我有以下文件。

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

首先,我得到了一个错误,即它无法将"Root"隐式转换为"Package"。

我需要一种方法来将读取的值(例如GWT_"value")分配给标签。正如你所看到的,有多个值的"包",所以我需要一个函数在这些包之间来回切换。

谢谢你的帮助!

XML反序列化和值分配问题

这适用于我使用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;}
}