将子元素反序列化为父元素的属性

时间:2010-06-15 11:50:50

标签: c# xml-serialization

我有需要反序列化的XML文件。我使用Visual Studio中的XSD工具来创建c#目标文件。生成的类会对文件进行反序列化,除非不是我需要的方式。

如果有任何帮助可以解决这个问题,我将不胜感激。

名为“data”的子元素应该是父元素“task”的属性。

XML的简短示例如下:

<task type="Nothing" id="2" taskOnFail="false" >
    <data value="" name="prerequisiteTasks" />
    <data value="" name="exclusionTasks" />
    <data value="" name="allowRepeats" />
    <task type="Wait for Tasks" id="10" taskOnFail="false" >
        <data value="" name="prerequisiteTasks" />
        <data value="" name="exclusionTasks" />
        <data value="" name="allowRepeats" />
    </task>
    <task type="Wait for Tasks" id="10" taskOnFail="false" >
        <data value="" name="prerequisiteTasks" />
        <data value="" name="exclusionTasks" />
        <data value="" name="allowRepeats" />
    </task>
</task>

我试图反序列化的类定义是以下形式:

public class task {
    public string prerequisiteTasks {get;set;}
    public string exclusionTasks {get;set;}
    public string allowRepeats {get;set;}

    [System.Xml.Serialization.XmlElementAttribute("task")]
    public List<task> ChildTasks {get;set;}
}

子任务很好,但生成的文件将'data'元素放入数据[]数组中,而不是作为我需要的任务类的命名成员。

1 个答案:

答案 0 :(得分:1)

C#无法反序列化通用列表。因此,您需要做的是定义如何反序列化泛型集合数据。为了实现你必须实现GetObjectData(SerializationInfo info,StreamingContext context)。

帮助查看本文。有一个示例代码:

http://www.codeproject.com/KB/cs/CSV2SQLScript.aspx