【问题标题】:Can't pass enum in .Net 2.0 Web Service无法在 .Net 2.0 Web 服务中传递枚举
【发布时间】:2012-08-10 11:45:11
【问题描述】:

我正在为 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,无论我在客户端上将它设置为什么。

感谢您的帮助。

【问题讨论】:

    标签: c# web-services enums windows-mobile


    【解决方案1】:

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

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

    另见:http://msdn.microsoft.com/en-us/library/aa347875.aspx

    【讨论】:

    • 非常感谢大角星的建议。不幸的是,该死的东西仍然不起作用。我真的不知道为什么。我有一个用于运行 Web 服务的单元测试项目。我已将该服务添加为“Web 参考”而不是“服务参考”。不知道这是否重要。
    • 如果您添加属性,请确保更新您的服务参考。它不会自动执行此操作。
    • 马克,你是在为 Windows 7 Phone 开发吗? DataContractAttribute 功能似乎不适用于 Window Mobile(.NET Framework 3.0 之前)。
    • 再次感谢大角星和 jp2code 的帮助。我在这上面浪费了太多时间。我只需要传递一个字节或其他东西而不是枚举。如果我弄清楚这里发生了什么,我会发布答案。
    【解决方案2】:

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

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

    container.TaskTypeSpecified = true;
    

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多