Я новичок в этом сайте, так что простите меня за новизну.
Я работаю над большой системой, созданной на 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, и я вполне уверен, что некоторые из вас научат меня полезным знаниям по этому вопросу.
Если кому-то из вас понадобится пример того, что я сделал для своей собственной культуры, просто дайте мне знать, я постараюсь создать из него пример, поскольку код, который я разрабатываю, является собственностью компании. Я работаю на.