WCF 客户端:传递枚举值始终为 0
本文关键字:枚举 客户端 WCF | 更新日期: 2023-09-27 17:56:14
我在服务中编写了以下代码。
[DataContract]
public class Email
{
private string senderEmail;
private MyEmailType emailType;
[DataMember]
public string SenderEmail { get { return senderEmail; } set { senderEmail = value; } }
[DataMember]
public MyEmailType EmailType { get { return emailType; } set { emailType = value; } }
}
[DataContract]
public enum MyEmailType
{
[EnumMember]
EmailType1 = 1,
[EnumMember]
EmailType2= 2
}
我像这样将电子邮件对象发送到服务:
Email email = new Email();
email.SenderEmail = "someemail@mail.com";
email.EmailType = MyEmailType.EmailType1;
bool isDispatchSuccessful = myClientObject.SendMassProcessEmail(email);
当我到达服务时,SenderEmail 属性的值是正确的,但 EmailType(枚举)得到 0,而不是 1(EmailType1)。
为什么会这样?
编辑:
我尝试将 MyEmailType 变量除了 Email 对象之外传递给 SendMassProcessEmail,如下所示:
bool isDispatchSuccessful = myClientObject.SendMassProcessEmail(email, MyEmailType.EmailType1);
现在,独立的枚举变量接收正确的值,但作为 Email 类的公共成员的枚举变量仍获得值 0。
要回答这个问题,请参考此链接 http://msdn.microsoft.com/en-us/library/aa347875(v=vs.110).aspx
如果你真的想传递实际值,我认为你应该这样做:
[DataContract]
public enum MyEmailType
{
[EnumMember(Value = 1)]
EmailType1 = 1,
[EnumMember(Value = 2)]
EmailType2= 2
}
您必须将 [DataContract] 添加到支持字段:
[DataContract]
public class Email
{
[DataMember]
private string senderEmail;
[DataMember]
private MyEmailType emailType;
public string SenderEmail { get { return senderEmail; } set { senderEmail = value; } }
public MyEmailType EmailType { get { return emailType; } set { emailType = value; } }
}
我遇到了同样的麻烦,但就我而言,这是参数名称中的错误。
[ServiceContract]
public interface ISendMail
{
/// <summary />
/// <param name="emailType">This parameter should be 'myEmailType'</param>
[OperationContract]
void Send(string senderEmail, MyEmailType emailType);
}
就我而言,第二个参数是服务器端的myEmailType,但是,当我在客户端创建接口时,我忘记了"my"。一个愚蠢的错误,可以为这个问题带来一些启发。