Enum не сериализовать

У меня есть служба WCF. он привязан к msmq, но это не проблема здесь. Я могу сериализовать объект, который имеет базовый класс и интерфейс, реализованный в базовом классе, а конкретный класс является производным от базового класса - это отлично работает.

однако, когда у меня есть перечисление в базовом классе, и я устанавливаю это значение, то после его десериализации / чтения из MSMQ это значение по-прежнему имеет значение по умолчанию (i.e не тот, который установлен вручную в коде)

любой идеи, что происходит? Я даже отметил перечисление как DataContract, а также каждый из членов перечисления с атрибутом EnumMember.

Как я могу сериализации перечислений?

4 ответов


попробуйте это.

[Serializable]
public enum EnumToSerialize
{
    [XmlEnum("1")]
    One = 1,
    [XmlEnum("2")]
    Two = 2
}

собственность была защищена. установите его в Public и viola-сериализовал свойство enum. Немного плохо, поскольку свойство находится в классе bass....лучше бы он был защищен!--1-->


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


Я использую это, что работает для публичного перечисления:

[Serializable]
public enum EnumToSerialize
{
    [EnumMember]
    One = 1,
    [EnumMember]
    Two = 2
}