Добавление атрибута к узлу XML с использованием XMLSerializer - PullRequest
1 голос
/ 10 марта 2011

Я новичок в этом сайте, так что простите меня за новизну.

Я работаю над большой системой, созданной на C #, и я не нашел способа сделать именно то, что я хочу, в следующей ситуации.

У меня есть XML, который содержит что-то вроде этого:

<XmlObject>
    <Info />
    <Objects>
        <Component>
            <FileData>C:\Folder\file.ext</FileData>
        <Component>
    </Objects>
</XmlObject>

И моя цель - получить это:

<XmlObject>
    <Info />
    <Objects>
        <Component>
            <FileData Extension=".ext">C:\Folder\file.ext</FileData>
        <Component>
    </Objects>
</XmlObject>

Но вот мои ограничения:

Файл XML создается с использованием XmlSerializer, а все, что находится под тегом Objects, создается с помощью отражения, поэтому я не могу добавить такие теги, как [XmlElementAttribute], в FileData.

В настоящее время мы используем XmlAttributeOverrides для добавления типа, возвращаемого отражением, в XmlSerializer. Моя проблема в том, что я мало что знаю о XmlAttributeOverrides и не могу найти способ добавить этот NodeAttribute там.

Кроме того, значение Extension является действительным расширением значения элемента. Пример:

<FileData Extension=".ext">C:\Folder\file.ext</FileData>
<FileData Extension=".png">C:\Folder\file.png</FileData>

Большое спасибо всем, кто поможет найти это или поможет мне решить эту проблему.

РЕДАКТИРОВАТЬ: На прошлой неделе я нашел другой способ сделать эту работу. Вместо использования XmlAttributeOverrides я создал новый класс, который при сериализации в XML может быть прочитан как простая строка, но с тегом XML, который содержит атрибут. Когда приложение выполняет отражение, я обнаруживаю элементы, которые должны быть выведены таким образом, и вместо того, чтобы выдавать IL, чтобы он мог использоваться в качестве строки, я испускаю IL, чтобы его можно было использовать как мой новый класс.

Тем не менее я не буду закрывать этот вопрос, поскольку мне очень интересно узнать больше о XmlAttributeOverrides, и я вполне уверен, что некоторые из вас научат меня полезным знаниям по этому вопросу.

Если кому-то из вас понадобится пример того, что я сделал для своей собственной культуры, просто дайте мне знать, я постараюсь создать из него пример, поскольку код, который я разрабатываю, является собственностью компании. Я работаю на.

1 Ответ

0 голосов
/ 28 апреля 2011

Вы можете использовать это решение: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

...