Проблема:
Если присвоить переменной-перечислению значение, не содержащееся явно в декларации:
enum MyEnum
{
A, B
}
...
MyEnum e = (MyEnum)145;
, затем его сериализовать (например, при пересылке через Soap-сообщение), то получится такой элемент:
<enumTypeName>145</enumTypeName>
при десериализации которого возникнет, понятное дело (ибо enum в xsd -- restriction), исключение System.InvalidOperationException : There is an error in XML document (%l, %c). ----> System.InvalidOperationException : '145' is not a valid value for MyEnum.
Есть ли способ это обойти? Заранее благодарен
Здравствуйте, GlebZ, Вы писали:
GZ>Занятно, а Enum.ToObject() не поможет?
Я ведь не имею способа вмешаться в процесс десериализации. Надо обойти это как-нибудь декларативно, вроде заставить сериализатор обрабатывать поле этого типа как int... Вот только как?
Проблема возникла при написании веб-сервиса, -- приветствуются альтернативные способы разруливания

Кроме, конечно, очевидного -- заменить enum на int в коде
Здравствуйте, Maxeemus, Вы писали:
M> возможно вот это подойдет: XmlValidatingReader
Нет, XmlValidatingReader лишь проверяет на соответствие входного потока указанной схеме.
В том-то и дело, что формально в моей ситуации все правильно: тип enum в FCL не является ограничением базового типа, а скорее его алиасом; в то время как restriction в xsdl является именно ограничением. Так что с точки xml/xsd тут все правильно и исключение кидается справедливо...
К тому же, разбор soap-сообщений осуществляет соответствующая инфраструктура .net, и вклиниться в этот процесс не так-то просто
Здравствуйте, _dIAMOND_, Вы писали:
_IA>Проблема:
_IA>Если присвоить переменной-перечислению значение, не содержащееся явно в декларации:
_IA>_IA>enum MyEnum
_IA>{
_IA>A, B
_IA>}
_IA>...
_IA>MyEnum e = (MyEnum)145;
_IA>
_IA>, затем его сериализовать (например, при пересылке через Soap-сообщение), то получится такой элемент:
_IA><enumTypeName>145</enumTypeName>
_IA>при десериализации которого возникнет, понятное дело (ибо enum в xsd -- restriction), исключение System.InvalidOperationException : There is an error in XML document (%l, %c). ----> System.InvalidOperationException : '145' is not a valid value for MyEnum.
_IA>Есть ли способ это обойти? Заранее благодарен
Посмотри XmlEnumAttribute