3

我正在为 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。

谢谢您的帮助。

4

2 回答 2

6

你需要确保你的枚举也有一个DataContract,否则它不会被序列化,并且每个成员必须有属性EnumMember

[DataContract]
public enum TaskTypeEnum 
{ 
     [EnumMember] 
     GoodsReceipt, 

     [EnumMember] 
     ImportCosting 
} 

另请参阅:http: //msdn.microsoft.com/en-us/library/aa347875.aspx

于 2012-08-14T07:55:36.147 回答
0

我有一个类似的问题。在原始类型的代理类字段(即不可为空的字段)中,有一个称为 Specified 的第二个字段。

也许在您的情况下,TaskContainer 有一个名为 TaskTypeSpecified 的字段。尝试设置

container.TaskTypeSpecified = true;
于 2012-11-09T13:15:37.653 回答