Possible Duplicate:
How do I serialize an enum value as an int?
Всем привет!
Мне интересно, есть ли способ заставить сериализацию значения перечисления в его целочисленное значение вместо его строкового представления.
Чтобы поместить вас в контекст: Мы используем в веб-приложении, которое сильно зависит от веб-сервисов, единый базовый класс для всех наших заголовков запросов, независимо от типа запроса.
Я хочу добавить поле Result в заголовок, чтобы у нас было место для передачи подсказок вызывающему приложению о том, как выполнялась операция на стороне веб-службы. У нас уже есть перечисление, объявленное на этот счет, но поскольку у нас есть устаревшие приложения, которые вызывают те веб-службы, которые могут не знать об этих перечислениях, я хотел бы отправить сериализовать эти значения как целые числа.
Нам уже приходилось сокращать длину этих заголовков с помощью [XmlElement (ElementName = "string presentationOfAttributeName")], потому что время от времени мы превышали максимальную длину 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; }
}
@Miral Я добавил атрибуты EditorBrowsable и Browsable, чтобы обойти это.
Очень хорошо ... сработало и для меня, так что я тоже мог запустить интерпретатор преобразования, так как в файле хранился странный уровень доступа.
@matt Howells: сериализуется ли Enum в int? я хочу сделать это без использования xmlenumattribute и без создания нового общедоступного свойства.
По умолчанию перечисления НЕ сериализуются как int. Я использую XMLSerializer для сериализации класса, и у меня такая же проблема, как описано.
(Пример Мэтта Хауэлса, кажется, работает, если вы измените сферу действия MyThingForSerialization на общедоступную, но я хотел бы увидеть лучшую реализацию, потому что это создает 1 дополнительное общедоступное свойство)
Обратите внимание, что
MyThingForSerializationдолжен быть общедоступным. XmlSerializer не будет смотреть на частные поля / свойства.