3

我需要在与我的 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 时,服务才能工作。如果它没有设置它会中断。我知道这是一种解决方法,但我正在寻找一种更有意义的解决方案,而不是设置任意值。我只是想了解它为什么会坏

提前致谢

4

3 回答 3

8

我的 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
}
于 2012-08-28T11:15:19.977 回答
7

尝试EnumMember在枚举值上添加属性。

于 2012-08-28T07:39:02.113 回答
3

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

您有多种选择来纠正此行为。

  • 您可以在枚举声明中使用Red = 0代替Red = 1(甚至省略它,它会产生相同的效果)。这样,默认值将是 Red 而不是无意义的值。
  • 您可以将默认值 Default = 0 添加到您的枚举中,您知道该值将具有“尚未定义颜色”的含义。
  • 您可以让您的属性为 nullable Color?,因此 null 将成为该属性的合法值和默认值
  • 您可以让构造函数为MyObjectColorEnum 属性分配默认颜色。

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

但是无论你做什么,枚举类型的默认值总是0。如果0不对应合法的枚举成员,那肯定是个问题。

于 2012-08-28T07:59:05.787 回答