Сериализация WCF Enums с использованием контрактов сообщений - PullRequest
3 голосов
/ 22 апреля 2010

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

Один из моих типов указывает свойство, тип которого, как оказалось, является перечислением:

[SerializableAttribute()]
[MessageContract(IsWrapped = false)]
[KnownType(typeof(RiskTypeCode))]
public partial class RiskType : Lookup
{

    private RiskTypeCode codeField;

    /// <remarks/>
    [XmlElement(ElementName="code")]
    [MessageBodyMember]
    public RiskTypeCode Code
    {
        get
        {
            return this.codeField;
        }
        set
        {
            this.codeField = value;
        }
    }

e.t.c.

Мое перечисление определяется как:

[Serializable()]
[DataContract]
public enum RiskTypeCode
{

    /// <remarks/>
    [XmlEnumAttribute(Name = "THING1")]
    [EnumMember]
    THING1,

    /// <remarks/>
    [XmlEnumAttribute(Name="THING2")]
    [EnumMember]
    THING2,

    /// <remarks/>
    [XmlEnumAttribute(Name="THING3")]
    [EnumMember]
    THING3,
}

Но когда я отправляю это по проводам, свойство RiskTypeCode не сериализуется - то есть оно пропускается из вывода.

Чем мне нужно украсить свой enum / свойство, чтобы передать его по проводам?

1 Ответ

0 голосов
/ 09 октября 2014

Использование DataContract и EnumMember , для MessageContract .

    [DataContract(Name = "ModoConsulta")]
    public enum ModoConsulta
    {
        [EnumMember()]
        Default = 0,
        [EnumMember()]
        RequestEV= 1,
        [EnumMember()]
        Server = 2
    }

    [MessageContract]
    public class QueryAdvancedReq : QueryReq
    {
        [MessageBodyMember]
        public DateTime? FromDate{ get; set; }

        [MessageBodyMember]
        public ModoConsulta Mode { get; set; }

        public override string ToString()
        {
            var str = new StringBuilder();
            str.Append(base.ToString());

            str.Append("FromDate : ");
            str.Append(FromDate== null ? "null" : FromDate.ToString());
            str.Append(", ");

            str.Append("Mode : ");
            str.Append(Mode == null ? "null" : Mode.ToString());
            str.Append(", ");

            return str.ToString();
        }

    }
...