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

StackOverflow https://stackoverflow.com/questions/117348

Вопрос

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

Всем привет!

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

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

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

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

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

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

Это было полезно?

Решение

Перечисления сериализуются в целые числа.Но в целом, если вам не нравится, как одно из ваших свойств сериализуется в 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; }
}

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top