2012-08-28 109 views
3

我需要在项目中定义一个Enum来隔离我的WCF服务项目。我正在创建一个包含枚举和其他数据的对象。当我通过WCF服务将对象传递给客户端时,我得到一个未找到的东西。通过WCF服务传递枚举

枚举:

public enum Color 
{ 
    Red = 1, 
    Blue, 
    Green, 
} 

对象传递:

public class MyObject 
{ 
    public Color ColorEnum { get; set; } 
    public string Name{ get; set; } 
} 

只有当我得到的目的说ColourEnum = Color.Red做服务工作的默认值。如果它没有设置它休息。我知道这是一种解决方法,但我正在寻找一种更有意义的解决方案,而不是设置一个arb值。我只是想知道为什么它打破

在此先感谢

+0

人...枚举从来良好的服务暴露...... – Adil

+0

@AdilMughal为什么呢?枚举是一个不错的选择,并且完全由SOAP协议支持。 – ken2k

+0

我同意他们支持,但基于一些经验... 签出stackoverflow后与一些关于枚举使用良好的讨论 http://stackoverflow.com/questions/326339/do-you-use-enum-types-in-你的 - wcf-web-services – Adil

回答

3

问题是属性的默认值ColorEnum不是您的枚举的有效值:当您创建MyObject时,该属性的默认值为0,并且0不对应于您的枚举的任何值。

您有多个选项可以纠正此问题。

  • 你可以有Red = 0而不是Red = 1(甚至忽略它,它也有同样的效果)在枚举声明。这样,默认值将是红色而不是无意义的值。
  • 您可以向您的枚举添加一个默认值Default = 0,您知道它具有“颜色未定义”的含义。
  • 你可以有你的属性格式是一个可空Color?,所以空将成为双方的合法值和默认的属性
  • 你可以有MyObject构造函数指定一个默认颜色的ColorEnum财产。

    public MyObject() this.ColorEnum = Color.Red; }

但是,不管你做什么,一个枚举类型的defaul值将始终为0,如果0不符合法律枚举成员,它一定是一个问题。

+0

所以你说如果我添加一个枚举'Default = 0,'除了赋予属性一些没有意义的arb值之外,我是否没有办法替代默认值0? – nivensookharan

+0

@nivensookharan:我已经编辑了我的答案,有一些选项可以解决您的问题。 – Falanwe

6

尝试增加你的枚举值EnumMember属性。

+0

耶刚刚做到了。仍然不起作用 - 其他任何缺失。我在枚举之上放置了[DataContract]以及 – nivensookharan

+2

@nivensookharan指定您的枚举的默认值。序列化程序无法为您的ColorEnum属性指定值,因为默认值为0,并且您的枚举从1开始。 – ken2k

6

我在我的WCF项目像这样的枚举:

[DataContract] 
public class CarBookReq 
{ 
    [DataMember] 
    public string RefNo { get; set; } 

    [DataMember] 
    public RateType MyProperty { get; set; } 

} 

[DataContract] 
public enum RateType 
{ 
    [EnumMember] 
    silver, 
    [EnumMember] 
    gold, 
    [EnumMember] 
    platinum, 
    [EnumMember] 
    young, 
    [EnumMember] 
    youngplus 
}