Можете ли вы принудительно преобразовать значение перечисления в целое число?[дубликат]
-
02-07-2019 - |
Вопрос
Возможный дубликат:
Как сериализовать значение перечисления как 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 дополнительное общедоступное свойство)