2012-03-26 1 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

안녕 조란, 나는 당신이'[XMLTEXT] '속성과'Odgovor.odgovor' 속성을 장식 할 필요가 생각한다. – 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

에 대한 완벽한 디시리얼라이저를 생성하는 방법을 제공합니다 모델을 사용한다면 XML 대신 Linq를 사용하는 것이 좋습니다. 샘플로

, 당신의 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을 사용해야합니다. 도와 주실 수 있습니까? –