【问题标题】:WCF Serialising Enums using Message ContractsWCF 使用消息契约序列化枚举
【发布时间】:2010-04-21 21:53:27
【问题描述】:

我有一些使用消息合约的 Web 服务。可能值得一提的是,对于这些服务,我不能转向数据合约......

我的一个类型指定了一个其类型恰好是枚举的属性:

[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 属性没有被序列化 - 即它被从输出中省略了。

我需要用什么来装饰我的枚举/属性才能让它跨过网络?

【问题讨论】:

  • 嗨@Kiquenet,对不起,这是很久以前的事了,我不记得它是如何解决的。我怀疑我们可能将其切换为整数,或者可能为股票序列化程序创建了覆盖。
  • @Kiquenet 看起来很有用,但我没有代码库来验证这是否解决了问题。

标签: wcf enums serialization messagecontract


【解决方案1】:

DataContractEnumMember 用于 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();
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多