我似乎无法弄清楚以下内容,并且我试图在这里尽可能多地使用可用主题。
我有以下文件。
<?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”)来表示标签。 正如您所看到的,有多个“包”值,因此我需要一个函数来在这些包之间前后切换。
感谢您的帮助!
答案 0 :(得分: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;}
}