Можете ли вы принудительно преобразовать значение перечисления в целое число?

Возможный дубликат:
Как сериализовать значение перечисления как целое число?

Всем привет!

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

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

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

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

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

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


person Pinpin    schedule 22.09.2008    source источник


Ответы (2)


Перечисления сериализуются в целые числа. Но в целом, если вам не нравится, как одно из ваших свойств сериализуется в 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; }
}
person Matt Howells    schedule 22.09.2008
comment
Обратите внимание, что MyThingForSerialization должен быть общедоступным. XmlSerializer не будет просматривать частные поля/свойства. - person Miral; 06.10.2010
comment
@Miral Я добавил атрибуты EditorBrowsable и Browsable, чтобы обойти это. - person Shimmy Weitzhandler; 29.10.2011
comment
Очень хорошо... у меня тоже сработало, так что я тоже мог запустить интерпретатор преобразования, так как файл хранил странный уровень доступа. - person RiddlerDev; 06.12.2011
comment
@matt Howells: сериализуется ли Enum в int? я хочу сделать это без использования xmlenumattribute и без создания нового общедоступного свойства. - person Gomathipriya; 09.01.2014

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

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

person Nikos Tsokos    schedule 25.11.2008