我有一个XML文件,我试图将其反序列化为相应的对象。它适用于大多数这些对象,除了一个正在加倍的项目。这是XML的相关部分:
<Clients>
<Client Name="My Company" SiteID="1"
GUID="xxx-xxx-xxx-xxx">
<Reports>
<Report Name="First Report" Path="/Custom/FirstReport">
<Generate>true</Generate>
</Report>
</Reports>
</Client>
</Clients>
“客户端”是List<Client>
个对象。每个Client
对象中都有一个List<Report>
对象。问题是,当反序列化此XML时,List<Report>
对象的计数为2 - “第一个报告”Report
对象在那里两次。为什么?这是C#:
public class Client {
[System.Xml.Serialization.XmlArray("Reports"), System.Xml.Serialization.XmlArrayItem(typeof(Report))]
public List<Report> Reports;
}
public class Report {
[System.Xml.Serialization.XmlAttribute("Name")]
public string Name;
public bool Generate;
[System.Xml.Serialization.XmlAttribute("Path")]
public string Path;
}
class Program
{
static void Main(string[] args)
{
List<Client> _clients = new List<Client>();
string xmlFile = "myxmlfile.xml";
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(List<Client>), new System.Xml.Serialization.XmlRootAttribute("Clients"));
using (FileStream stream = new FileStream(xmlFile, FileMode.Open))
{
_clients = xmlSerializer.Deserialize(stream) as List<Client>;
}
foreach(Client _client in _clients)
{
Console.WriteLine("Count: " + _client.Reports.Count); // This write "2"
foreach(Report _report in _client.Reports)
{
Console.WriteLine("Name: " + _report.Name); // Writes "First Report" twice
}
}
}
}
答案 0 :(得分:2)
List<Report>
对象时,会向其添加一个默认报告。然后XML添加它找到的那个。因此加倍。 ::叹息::
答案 1 :(得分:0)
使用那个确切的代码和XML,我在_client.Reports中得到1个项目(目标是3.5和4.0)。我确保你正在抓取正确的XML并使用正确的Report类。也许它指的是不同命名空间中的一个。