我正在为Windows Mobile开发,因此必须使用Web服务而不是WCF。我有一个业务对象,我通过Web服务传递,除了一个枚举属性,它工作正常。无论客户端将其设置为什么值,该值始终作为默认值显示在服务器上。非常困惑:(
以下是服务器上定义的业务对象中的代码:
public enum TaskTypeEnum { GoodsReceipt, ImportCosting };
[Serializable, DataContractAttribute]
public class TaskContainer
{
[DataMemberAttribute]
public TaskTypeEnum TaskType { get; set; }
...
以下是客户端上设置此属性的代码:
var container = new TaskContainer();
container.TaskType = TaskTypeEnum.ImportCosting;
service.Save(container);
由于某个未知原因,当此“容器”对象到达服务器时,无论我在客户端上将其设置为什么,TaskType属性始终设置为GoodsReceipt。
感谢您的帮助。
答案 0 :(得分:6)
您需要确保您的枚举也有一个DataContract,否则它不会被序列化,并且每个成员必须具有EnumMember属性
[DataContract]
public enum TaskTypeEnum
{
[EnumMember]
GoodsReceipt,
[EnumMember]
ImportCosting
}
答案 1 :(得分:0)
我有类似的问题。在基本类型(即非可空字段)的代理类字段中,有一个名为Specified的第二个字段。
也许在你的情况下,TaskContainer有一个名为TaskTypeSpecified的字段。尝试设置
container.TaskTypeSpecified = true;