2017-12-12 2 views
0

Ich muss unten XML deserialisieren. Das Kapitelelement kann mehrere untergeordnete Kapitelelemente enthalten. Ich habe versucht, das XML mithilfe von XmlSerializer zu deserialisieren. Alle Elemente werden wie erwartet deserialisiert, aber das Problem besteht darin, dass das untergeordnete Chapter-Array nicht deserialisiert wird. Fehle ich hier etwas? Bitte helfen Sie.Wie XML in C# deserialize mit untergeordneten Knoten des gleichen Typs

<Survey> 
     <SurveyResults> 
      <Subject> 
       <Chapter> 
        <ChapterIterationName /> 
        <Questions /> 
        <Chapter> 
         <ChapterName>CHAPTER 1</ChapterName> 
         <ChapterIterationName /> 
         <Questions> 
          <Question> 
           <Text>Question 1</Text> 
          </Question> 
          <Question> 
           <Text>Question 2</Text> 
          </Question> 
         </Questions> 
         <Chapter> 
          <ChapterName>CHAPTER 1.1</ChapterName> 
          <ChapterIterationName /> 
          <Questions> 
           <Question> 
            <Text>Questoin 1</Text> 
           </Question> 
           <Question> 
            <Text>Questoin 2</Text> 
           </Question> 
          </Questions> 
         </Chapter> 
         <Chapter> 
          <ChapterName>CHAPTER 1.2</ChapterName> 
          <ChapterIterationName /> 
          <Questions> 
           <Question> 
            <Text>Questoin 1</Text> 
           </Question> 
           <Question> 
            <Text>Questoin 2</Text> 
           </Question> 
          </Questions> 
         </Chapter> 
        </Chapter> 
       </Chapter> 
      </Subject> 
     </SurveyResults> 
    </Survey> 

Hier ist der Code, den ich ausprobiert habe.

public class Survey 
    { 
     public SurveyResults SurveyResults { get; set; } 
    } 

    public class SurveyResults 
    { 
     public Subject Subject { get; set; } 
    } 

    public class Subject 
    { 
     public List<Chapter> Chapter { get; set; } 
    } 

    public class Chapter 
    { 
     public string ChapterName { get; set; } 
     public string ChapterIterationName { get; set; } 

     [XmlArray("Chapter")] 
     public List<Chapter> Chapters { get; set; } 
     public List<Questions> Questions { get; set; } 
    } 

    public class Questions 
    { 
     public List<Question> Question { get; set; } 
    } 

    public class Question 
    { 
     public string Text { get; set; } 
    } 

    public class Serializer 
    { 
     public T Deserialize<T>(string input) where T : class 
     { 
      System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T)); 

      using (StringReader sr = new StringReader(input)) 
      { 
       return (T)ser.Deserialize(sr); 
      } 
     } 
    } 

    Serializer ser = new Serializer(); 
    Survey survey = ser.Deserialize<Survey>(xlString); 

Ergebnis Output

+0

Warum haben Sie 'Liste Questions' in' Chapter' statt direkt 'Liste Questions'? –

Antwort

1

[Bearbeiten]

Nach so vielen Änderungen, fand ich die einfache Möglichkeit, dies zu lösen:

  1. Kopieren Sie XML-Dateiinhalte.
  2. Wählen Sie in den Visual Studio-Menüs Bearbeiten -> Inhalte einfügen -> XML als Klassen einfügen.
  3. Verwenden Sie den Deserialisierungscode.

    string path = @"G:\Projects\StackOverFlow\WpfApp1\Survey.xml"; 
        FileStream reader = File.OpenRead(path); 
        XmlSerializer ser = new XmlSerializer(typeof(Survey)); 
        Survey survey = (Survey)ser.Deserialize(reader); 
    
+1

funktioniert nicht, untergeordnete Kapitel sind nicht vorhanden & Fragenanzahl = 0. Haben Sie die Frage mit der Ausgabe aktualisiert. – KousiK

+0

@KousiK Ich habe meine Antwort bearbeitet, jetzt funktioniert es. Guck mal! –

+0

Es gibt kein Element namens . Das Element ist verschachtelt zu einem anderen . Ich erstelle das XML nicht, ich erhalte das XML von Dritten. – KousiK

Verwandte Themen