2012-03-26 15 views
3

XMLファイルにあるクイズの質問をインポートしたいと思います。 XMLには質問のリストがあり、すべての質問には回答のリストがあります。誰かが私を助けて、私が間違っている場所を教えてくれる?XML逆シリアル化C#配列

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#コード:私はあなたが、追加要素で<Odgovor>要素をラップする必要があると思う

[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); 
    } 

} 
+0

のXmlSerializerは ''(例えば)を探しています。 ''を 'Foo []'配列または 'List 'に逆シリアル化します。しかし、ソースに 'ArrayOfFoo'要素がない場合、それを行う方法を知りません。 – phoog

+0

XML文書を編集しますが、プログラムはまだ動作しません。 –

+0

こんにちはZoran、 'Odgovor.odgovor'プロパティを' [XmlText] '属性で飾る必要があると思います。 – phoog

答えて

1

- 例えば<Odgovori>

+0

私はXMLファイルとC#コードを編集していますが、も追加しますが、まだ動作していないプログラムがありますか? –

0

アレイとオブジェクトの両方にデシリアライザが必要です。

[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シリアル化に限定されるものではないし、あなたの目的はあなたのオブジェクトにXMLファイルを読み込むために、単純である場合Convert XML String to ObjectはどのようにあなたのXML

0

のための完璧なデシリアライザを生成する方法を提供しますモデルでは、代わりにLinqをXMLに使うことをお勧めします。試料として

、あなたXMLFILEは、次のコードを使用して、クラスに読み込むことができます。

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

ありがとう、助けてください、私はXML Deserializationを使用する必要があります、あなたはそれで私を助けることができますか? –

関連する問題