Десериализация дочерних элементов как атрибутов родительских - PullRequest
1 голос
/ 15 июня 2010

У меня есть XML-файлы, которые мне нужно десериализовать. Я использовал инструмент XSD из Visual Studio для создания объектных файлов 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 Ответ

1 голос
/ 15 июня 2010

C # не может десериализовать общие списки. Итак, вам нужно определить, как будут десериализованы общие данные сбора. Чтобы подтвердить, что вам нужно реализовать GetObjectData (информация SerializationInfo, контекст StreamingContext).

Чтобы помочь проверить эту статью. Есть пример кода:

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

...