[英]XML deserialization C# array
我想導入XML文件中的測驗問題。 XML中有問題列表,每個問題都有一個答案列表。 有人能幫幫我,告訴我哪里錯了嗎?
XML文件“pitanja.xml”:
<?xml version="1.0" encoding="utf-8"?>
<Pitanja>
<Pitanje>
<TekstPitanja>
U kojoj državi se nalazi Ajfelova kula?
</TekstPitanja>
<Odgovori>
<Odgovor tacan = "true" > Francuska </Odgovor>
<Odgovor> Nemačka </Odgovor>
<Odgovor> Španija </Odgovor>
<Odgovor> Italija </Odgovor>
</Odgovori>
</Pitanje>
<Pitanje>
<TekstPitanja>
U kom gradu se nalazi Big Ben?
</TekstPitanja>
<Odgovori>
<Odgovor tacan = "true" > London </Odgovor>
<Odgovor> Pariz </Odgovor>
<Odgovor> Lisabon </Odgovor>
<Odgovor> Madrid </Odgovor>
</Odgovori>
</Pitanje>
<Pitanje>
<TekstPitanja>
Glavni grad Španije je?
</TekstPitanja>
<Odgovori>
<Odgovor tacan = "true" > Madrid </Odgovor>
<Odgovor> Barselona </Odgovor>
<Odgovor> Lisabon </Odgovor>
<Odgovor> Rim </Odgovor>
</Odgovori>
</Pitanje>
</Pitanja>
C#代碼:
[XmlRoot("Pitanja")]
public class Pitanja
{
[XmlArray("Pitanja")]
[XmlArrayItem("Pitanje")]
public List<Pitanje> SvaPitanja { get; set; }
}
public class Pitanje
{
[XmlElement("TekstPitanja")]
public string TekstPitanja { get; set; } // Tekst pitanja
[XmlArray("Odgovori")]
[XmlArrayItem("Odgovor")]
public List<Odgovor> Odgovori { get; set; } // Niz odgovora na pitanje
}
public class Odgovor
{
[XmlText]
public string odgovor { get; set; }
[XmlAttribute]
public Boolean tacan { get; set; }
}
public void ucitajpitanja()
{
XmlSerializer dsr = new XmlSerializer(typeof(Pitanja));
using (System.IO.StreamReader str = new System.IO.StreamReader(@"C:\pitanja.xml"))
{
pitanja = (Pitanja)dsr.Deserialize(str);
}
}
我認為你需要將<Odgovor>元素包裝在一個額外的元素中 - 例如<Odgovori>
Array和對象都必須具有反序列化器。
[Serializable]
public class Pitanje {
public Pitanje() { }
[XmlAttribute]
public Boolean tacan { get; set; }
}
[Serializable]
[XmlRoot("Pitanja", Namespace = "", IsNullable = false)]
public class PitanjaModelList {
[XmlElementAttribute("Pitanje", Form = XmlSchemaForm.Unqualified)]
public List<Pitanje> PitanjaList { get; set; }
}
這里接受的答案是: 將XML String轉換為Object將為您提供如何為XML生成完美的反序列化器
如果您不限於XML序列化,並且您的目標只是將XML文件讀入對象模型,那么作為替代方案,我建議考慮使用Linq to XML。
作為示例,您可以使用以下代碼將XML文件讀入您的類:
var result = new Pitanja
{
SvaPitanja = (from pitanje in System.Xml.Linq.XDocument.Load(@"C:\pitanja.xml").Root.Elements()
select new Pitanje
{
TekstPitanja = pitanje.Element("TekstPitanja").Value.Trim(),
Odgovori = (from odgovor in pitanje.Elements("Odgovor")
let tacanAttribute = odgovor.Attribute("tacan")
select new Odgovor
{
odgovor = odgovor.Value.Trim(),
tacan = tacanAttribute != null && tacanAttribute.Value == "true"
}).ToList()
}).ToList()
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.