如何使用asp.net序列化来反序列化一个具有值和属性的xml节点

问题描述:

我有4个小类将反编译xml轮询的xml反序列化为可用的类来构建轮询。如何使用asp.net序列化来反序列化一个具有值和属性的xml节点

现在,我知道如何从一个类设置一个属性,以匹配xml中的某个属性或元素,如果该元素只是一个字符串,这很容易 但如果该元素也有一个像下面的例子?

<Questions> 
<Question id="a guid"> 
    <AnswerItems> 
    <AnswerItem Id="a guid">3</AnswerItem> 
    <AnswerItem Id="a guid">2</AnswerItem> 
    <AnswerItem Id="a guid">5</AnswerItem> 
    </AnswerItems> 
</Question> 
</Questions> 

问题类是这样的:

[Serializable()] 
public class Question 
{ 
    [XmlAttribute("Id")] 
    public Guid QuestionId { get; set; } 

    [XmlArray("AnswerItems")] 
    [XmlArrayItem("AnswerItem", typeof(AnswerItem))] 
    public AnswerItem[] AnswerItems { get; set; } 
} 

[Serializable()] 
public class AnswerItem 
{ 
    [XmlAttribute("Id")] 
    public Guid QuestionId { get; set; } 

    // how do i fetch the value of this node? 
    // its not a XmlElement and it's not an XmlValue 
} 

好了,一个AnswerItem节点的值,这就是我想为好。 我可以很容易地不使用AnswerItem类,只是使用String类型的XmlArray AnswerItems并将值放入数组中,但然后我会丢失AnswerItem的Id属性。

AnswerItem中,创建一个名为Value的属性并将其标记为XmlText属性。此设置将导致XmlSerializerAnswerItem元素中的文本读取到Value属性中。

[Serializable()] 
public class AnswerItem 
{ 
    [XmlAttribute("Id")] 
    public Guid QuestionId { get; set; } 

    [XmlText] 
    public string Value { get; set; } 
} 
+2

只是想发布,我一直在寻找类似问题的答案,这是第一个在所有堆栈中向我展示了这样的东西...我会给+10 if我可以 2017-05-02 05:49:47