2017-12-12 15 views
0

私はXMLを逆シリアル化する必要があります。 chapter要素には、複数の子チャプター要素を含めることができます.XmlSerializerを使用してXMLを逆シリアル化しようとしました。 すべての要素が期待どおりにデシリアライズされていますが、チャプターの配列がデシリアライズされていないという問題があります。助けてください。同じタイプの子ノードを持つC#でXMLを逆シリアル化する方法

<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> 

これは私が試したコードです。

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

結果 Output

+0

なぜあなたの代わりに、直接 '一覧 Questions'の' Chapter'に '一覧 Questions'を持っているのですか? –

答えて

1

[編集]

非常に多くの編集後、私はこの問題を解決する簡単な方法を見つけました:

  1. はあなたのXMLファイルの内容をコピーします。
  2. Visual Studioメニューからを選択して編集 - >形式を選択して貼り付け - > XMLをクラスとして貼り付け
  3. デシリアライズコードを使用してください。

    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

が機能していない、チャイルドチャプターは存在しません。質問数= 0.質問を出力に更新しました。 – KousiK

+0

@ KousiK私は自分の答えを編集しました。見てみましょう! –

+0

という要素はありません。要素は、別のにネストされています。私はXMLを作成していない、私は第三者からXMLを取得しています。 – KousiK

関連する問題