Реализация IXmlSerializable в сгенерированном классе, который имеет XmlTypeAttribute - PullRequest
2 голосов
/ 26 апреля 2010

По сути, первоначальная проблема заключается в том, что мне нужно заставить сериализованное логическое значение равным 0 или 1. Я нашел решение реализовать IXmlSerializable, что я и сделал. К сожалению, класс, который я пытаюсь сериализовать, генерирует код из схемы и содержит XmlTypeAttribute. Когда я пытаюсь (де) сериализовать объект с помощью XmlSerializer, созданного обычным способом (new XmlSerializer(type)), он выдает это исключение:

System.InvalidOperationException: Only XmlRoot attribute may be specified for the type ______ Please use XmlSchemaProviderAttribute to specify schema type.

Сразу приходят на ум два варианта:

1) удалить атрибут в сгенерированном коде. Это изменение необходимо будет вносить каждый раз, когда код будет перегенерирован.

2) Используйте объект XmlAttributeOverrides при создании сериализатора для удаления атрибута. Для этого потребуется, чтобы остальная часть кода «знала», что ему нужно переопределить этот атрибут. Кроме того, выбрасываемое исключение не дает абсолютно никакой подсказки относительно того, что нужно сделать, чтобы исправить это.

Оба варианта вроде воняют. Есть ли третий вариант?

1 Ответ

0 голосов
/ 30 апреля 2010

У меня та же проблема: я удаляю работы IXMLSerializable, я ими не пользуюсь, и вы пытались скрыть истину или ложь с некоторой логикой в ​​свойствах? Как это:

private bool mblnFlag;

public String Flag 
{
   get
   {
      return mblnFlag;
   }
   set
   {
      mblnFlag = (value == "1")
   }
}

Конечно, вы должны улучшить свойства и сделать больше проверок, но это идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...