通过WCF服务传递枚举

时间:2012-08-28 07:37:21

标签: c# 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值。而我只想了解它为什么会中断

提前致谢

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:7)

我的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
}

答案 2 :(得分:3)

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

您有多种方法可以纠正此行为。

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

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

但无论你做什么,枚举类型的默认值将始终为0.如果0不对应合法的枚举成员,则必然会出现问题。

相关问题