2014-03-26 6 views
1

XML을 C# 개체로 deserialize하려고합니다. 나는 많은 계획을 시도했지만 내 삶에 대한 위선적 인 말투는 deserialisation을 받아서 choices을 데리러. ... 아래 코드로 표시문자열 목록 역 직렬화

는 XML ...

@"<?xml version=""1.0"" encoding=""UTF-8""?> 
<survey> 
    <question> 
     <type>multiple-choice</type> 
     <text>Question 1</text> 
     <choices> 
      <choice>Answer A</choice> 
      <choice>Answer B</choice> 
      <choice>Answer C</choice> 
     </choices> 
    </question> 
    <question> 
     <type>multiple-choice</type> 
     <text>Question 2</text> 
     <choices> 
      <choice>Answer a</choice> 
      <choice>Answer b</choice> 
     </choices> 
    </question> 
</survey> 

내 C# 모델 ...

[XmlType("question")] 
public struct Question 
{ 
    public String type; 
    public String text; 
    public Choices choices; 
}; 

public class Choices : List<String> { }; 

[XmlType("survey")] 
public class Survey 
{ 
    [XmlElement(ElementName = "question")] 
    public Question[] Questions; 
}; 

Deserialisation ...

using System.Xml.Serialization; 

Survey survey; 
XmlSerializer serializer = new XmlSerializer(typeof(Survey)); 
survey = (Survey)serializer.Deserialize(reader); 

결과보기 JSON ...

{"Questions":[ 
{"type":"multiple-choice","text":"Question 1","choices":[]}, 
{"type":"multiple-choice","text":"Question 2","choices":[]} 
]} 
+0

을,'대신'공공의 선택의 선택의 ; "(내 대답 참조). 또한'Choices' 클래스는'List '의 자식이되어서는 안됩니다. –

+0

@MarkusSafar, 고마워, 네. 나는'public String [] choicess]뿐만 아니라 그것을 시도했지만 질문을 위해 이상하게 작동 할 수는 없었다. 하지만 그것은 토마스의 대답 – spiderplant0

답변

1

choices에서 이러한 속성을 추가

[XmlArray] 
[XmlArrayItem("choice")] 
public Choices choices; 
0

그것은 public List<string> choices; 대신 public Choices choices; 있어야하지 않나요? Question (배열 사용)과 동일하게 수행했기 때문입니다.

1

내가이 질문의 범위를 넘어 너무 멀리 갈 수 있지만 VS2013 정말 멋진 기능이있다 : 나는`공개 목록 선택해야한다 생각 Edit-->Paste Special--> Paste XML As Classes

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] 
public partial class survey 
{ 

    private surveyQuestion[] questionField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("question")] 
    public surveyQuestion[] question 
    { 
    get 
    { 
     return this.questionField; 
    } 
    set 
    { 
     this.questionField = value; 
    } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class surveyQuestion 
{ 

    private string typeField; 

    private string textField; 

    private string[] choicesField; 

    /// <remarks/> 
    public string type 
    { 
    get 
    { 
     return this.typeField; 
    } 
    set 
    { 
     this.typeField = value; 
    } 
    } 

    /// <remarks/> 
    public string text 
    { 
    get 
    { 
     return this.textField; 
    } 
    set 
    { 
     this.textField = value; 
    } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlArrayItemAttribute("choice", IsNullable = false)] 
    public string[] choices 
    { 
    get 
    { 
     return this.choicesField; 
    } 
    set 
    { 
     this.choicesField = value; 
    } 
    } 
} 
+0

에 설명 된대로 특성을 추가 할 때 작동합니다. 알아두면 좋을 것입니다. – spiderplant0