Я разрабатываю несколько сложных классов на VB.net (но вы можете написать свой ответ на C #, если вы предпочитаете: P), которые содержат данные, которые должны быть загружены из XML.Очевидное решение, конечно, состоит в том, чтобы разработать сериализуемый класс, чтобы автоматизировать процесс загрузки.
Теперь моя проблема заключается в следующем: структура XML исправлена, и я не могу ее изменить, иу него есть некоторые неудобства, из-за которых сериализация становится болезненной.Вот пример крошечного фрагмента DTD, который лучше объясняет проблему:
<!ELEMENT Relationship ( AttributePairs | AscendCaption | DescendCaption | ErrPreventInsertOrUpdateChild | ErrPreventDeleteParent | ErrPreventUpdateParent |ExtendedProperties |HiddenProperties )* >
<!ATTLIST Relationship
CountAggregates CDATA #IMPLIED
CountReplicates CDATA #IMPLIED
OnParentUpdate (PreventIfChildren|UpdateChildren) #IMPLIED
OnParentDelete (PreventIfChildren|DeleteChildren|NullChildrenForeignKey) #IMPLIED
IsEnforce (True|False) #REQUIRED
OnChildInsertOrUpdate (PreventIfNoParent|InsertParentIfNone) #IMPLIED
ChildRoleName CDATA #IMPLIED
ParentRoleName CDATA #IMPLIED
ParentAttributeGroupInstance CDATA #IMPLIED
ChildAttributeGroupInstance CDATA #IMPLIED
>
<!--Lots of other sutff not needed for this example -->
Как видите, все вышеперечисленные атрибуты можно легко сериализовать, просто объявив соответствующее свойство и расширив его с помощью <XmlAttribute()>
тег.За исключением:
IsEnforce (True | False) # REQUIRED
Так как True и False не являются допустимыми логическими значениями в xml (из-за заглавных букв T и F), и процесс сериализации завершится ошибкой.
Теперь ... единственный другой вариант, который я знаю, - это реализовать IXMLSerializable вручную, что я сделал для других классов, и это работает, но это также означает, что я должен читать "вручную" каждый атрибут /элемент, даже те, которые я мог бы легко сериализовать автоматически с тегами.
Итак, наконец, мой вопрос: Возможно ли смешать два метода?То есть: автоматически сериализовать с тегами, а затем «войти» вручную и прочитать вручную более «хитрые» значения?(просто логический пример, предположим, я хочу вручную прочитать некоторые свойства по желанию)