2008-09-22 3 views
2

Можно создать дубликат:
How do I serialize an enum value as an int?Можете ли вы заставить сериализацию значения перечисления в целое число?

Привет, всем!

Мне интересно, есть ли способ заставить сериализацию значения перечисления в его целочисленное значение вместо его строкового представления.

Чтобы использовать вас в контексте: Мы используем в веб-приложении, которое в значительной степени зависит от веб-сервисов, одного базового слоя для всех наших заголовков запросов, независимо от типа запроса.

Я хочу добавить поле результата в заголовок, поэтому у нас будет место для передачи подсказок обратно вызывающему приложению относительно того, как эта операция выполнялась на стороне веб-службы. У нас уже есть перечисление, объявленное на этот счет, но поскольку у нас есть устаревшие приложения, которые обращаются к тем веб-службам, которые могут не знать об этих перечислениях, я бы хотел отправить сериализацию этих значений в виде целых чисел.

Нам уже пришлось сократить длину этих заголовков с помощью [XmlElement (ElementName = "string presentationOfAttributeName")], потому что мы время от времени превышали максимальную длину URL-адреса IE, и я задавался вопросом, есть ли аналогичные атрибуты для принудительно сериализуйте значения перечисления в целые числа.

Кто-нибудь слышал об этом?

Как всегда, спасибо за помощь, Pascal

ответ

6

Перечисления сделать сериализации в Интс. Но в общем, если вам не нравится, как один из ваших свойств получает сериализован в XML, вы можете просто сделать это:

[XmlIgnore] 
public MyThing MyThing { get; set; } 

[XmlElement("MyThing")] 
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] 
public string MyThingForSerialization 
{ 
    get { return //convert MyThing to string; } 
    set { MyThing = //convert string to MyThing; } 
} 
+0

Обратите внимание, что `MyThingForSerialization` должен быть общественности. XmlSerializer не будет рассматривать частные поля/свойства. – Miral 2010-10-06 04:23:31

3

Перечисления НЕ сериализовать в ИНТ по умолчанию. Я использую XMLSerializer для сериализации класса, и у меня такая же проблема, как описано.

(Пример Matt Howells, кажется, работает, если изменить сферу MyThingForSerialization для общественности, но я хотел бы видеть лучшую причину реализации это создает 1 дополнительную общественную собственность)