Сериализация WCF Enums с использованием контрактов сообщений
У меня есть несколько веб-сервисов, которые используют контракты сообщений. Вероятно, стоит упомянуть, что для этих сервисов я не могу перейти на Data-контракты...
Один из моих типов указывает свойство, тип которого, как оказалось, является перечислением:
[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 не сериализуется - то есть оно исключается из вывода.
Чем мне нужно украсить свой enum/ свойство, чтобы передать его по проводам?
1 ответ
Использование 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();
}
}