通过WCF服务传递枚举
我需要在项目中将Enum定义为我的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才能使服务正常工作。 如果它没有设置它rest。 我知道这是一种解决方法,但我正在寻找一个更有意义的解决方案,而不是设置一个arb值。 而我只是想明白为什么它会破裂
提前致谢
我在我的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 }
尝试在枚举值上添加EnumMember
属性。
问题是属性的默认值ColorEnum
不是枚举的有效值:当您创建MyObject
,属性的默认值为0,而0与枚举的任何值都不对应。
您有多个选项可以更正此行为。
- 你的枚举声明中可以有
Red = 0
而不是Red = 1
(甚至可以省略它,它会产生相同的效果)。 这样,默认值将是红色而不是无意义的值。 - 您可以在枚举中添加默认值Default = 0,您知道它将具有“未定义颜色”的含义。
- 你可以让你的属性成为可以为空的
Color?
,因此null将成为合法值和属性的默认值 -
您可以让
MyObject
的构造函数为ColorEnum属性指定默认颜色。public MyObject(){this.ColorEnum = Color.Red; }
但无论你做什么,枚举类型的默认值将始终为0.如果0不对应合法的枚举成员,则必然会出现问题。