Xml-сериализация enum'ов (Soap)
От: _dIAMOND_ Россия  
Дата: 30.09.04 17:30
Оценка:
Проблема:
Если присвоить переменной-перечислению значение, не содержащееся явно в декларации:
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.

Есть ли способ это обойти? Заранее благодарен
Re: Xml-сериализация enum'ов (Soap)
От: GlebZ Россия  
Дата: 30.09.04 17:43
Оценка:
Здравствуйте, _dIAMOND_, Вы писали:

_IA>Есть ли способ это обойти? Заранее благодарен

Занятно, а Enum.ToObject() не поможет?
Re[2]: Xml-сериализация enum'ов (Soap)
От: _dIAMOND_ Россия  
Дата: 30.09.04 18:02
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Занятно, а Enum.ToObject() не поможет?


Я ведь не имею способа вмешаться в процесс десериализации. Надо обойти это как-нибудь декларативно, вроде заставить сериализатор обрабатывать поле этого типа как int... Вот только как?
Проблема возникла при написании веб-сервиса, -- приветствуются альтернативные способы разруливания
Кроме, конечно, очевидного -- заменить enum на int в коде
Re: Xml-сериализация enum'ов (Soap)
От: Maxeemus  
Дата: 30.09.04 19:10
Оценка:
Здравствуйте, _dIAMOND_, Вы писали:
возможно вот это подойдет: XmlValidatingReader
Re[2]: Xml-сериализация enum'ов (Soap)
От: _dIAMOND_ Россия  
Дата: 30.09.04 19:26
Оценка:
Здравствуйте, Maxeemus, Вы писали:

M> возможно вот это подойдет: XmlValidatingReader


Нет, XmlValidatingReader лишь проверяет на соответствие входного потока указанной схеме.
В том-то и дело, что формально в моей ситуации все правильно: тип enum в FCL не является ограничением базового типа, а скорее его алиасом; в то время как restriction в xsdl является именно ограничением. Так что с точки xml/xsd тут все правильно и исключение кидается справедливо...
К тому же, разбор soap-сообщений осуществляет соответствующая инфраструктура .net, и вклиниться в этот процесс не так-то просто
Re: Xml-сериализация enum'ов (Soap)
От: efim Россия  
Дата: 01.10.04 03:19
Оценка:
Здравствуйте, _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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.