Я разрабатываю несколько сложных классов в VB.net (но вы можете написать свой ответ на C#, если хотите: P), которые содержат данные, которые необходимо загрузить из XML. Очевидным решением является, конечно, проектирование сериализуемого класса, поэтому для автоматизации процесса загрузки.Возможно ли «смешанная» XML-сериализация в .net?
Теперь моя проблема заключается в следующем: структура 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
Поскольку истина и ложь не являются допустимыми булевы значения в XML (за счет капитала T и F) и процесс сериализации потерпит неудачу.
Теперь ... единственный другой вариант, который, как я знаю, заключается в том, чтобы реализовать IXMLSerializable вручную, что я сделал для других классов, и он работает, но это также означает, что я должен читать «вручную» каждый атрибут/элемент, даже те, которые я могу легко сериализовать автоматически с помощью тегов.
Итак, наконец, мой вопрос: Можно ли использовать MIX два метода? Т.е.: автоматически сериализоваться с тегами, а затем «входить» вручную и читать вручную более «сложные» значения? (Булева просто пример, предположим, что я хочу, чтобы вручную прочитать некоторые свойства по желанию)
Так у вас есть XML DTD с недопустимыми значениями? – StingyJack
XML очень строгий. Если вы «xml» требует недействительного xml, то это не xml ... так что вам, вероятно, захочется, чтобы препроцессор обрабатывал проблемы и сохранял ваши * фактические * манипуляции с XML-грязью - просто – STW
@StingyJack: нет, в DTD вы можете делать то, что хотите, и разработчики этого DTD (я его не проектировал) решили использовать True и False. НО стандарт XSchema, который используется для сериализации в .NET, является более строгим и допускает только «true» и «false» как допустимые логические значения. Проблема в том, что у меня уже есть XML, и он не является «неправильным» как таковым ... я должен приспособить его к моим потребностям, а в классе мне нужно логическое, поэтому я должен как-то прочитайте его как логическое, даже если для DTD это всего лишь перечислимый атрибут –