gpt4 book ai didi

WCF 使用消息协定序列化枚举

转载 作者:行者123 更新时间:2023-12-05 01:19:26 25 4
gpt4 key购买 nike

我有一些使用消息契约的网络服务。可能值得一提的是,对于这些服务,我无法转向数据契约(Contract)...

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

[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;
}
}

等等

我的枚举定义为:

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

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

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

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

但是当我通过网络发送它时,RiskTypeCode 属性没有被序列化——也就是说,它从输出中被省略了。

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

最佳答案

MessageContract 使用 DataContractEnumMember

    [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();
}

}

关于WCF 使用消息协定序列化枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2686830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com