C# 通过WCF服务传递枚举
我需要在我的WCF服务项目中定义一个项目中的枚举。我正在创建一个包含枚举和其他数据的对象。当我通过WCF服务将对象传递给客户机时,我会得到一个NotFound 枚举: 要传递的对象:C# 通过WCF服务传递枚举,c#,wcf,C#,Wcf,我需要在我的WCF服务项目中定义一个项目中的枚举。我正在创建一个包含枚举和其他数据的对象。当我通过WCF服务将对象传递给客户机时,我会得到一个NotFound 枚举: 要传递的对象: public class MyObject { public Color ColorEnum { get; set; } public string Name{ get; set; } } 只有当我给对象一个默认值say colorenum=Color.Red时,服务才会工作。如果它没有设置,它就
public class MyObject
{
public Color ColorEnum { get; set; }
public string Name{ get; set; }
}
只有当我给对象一个默认值say colorenum=Color.Red时,服务才会工作。如果它没有设置,它就会中断。我知道这是一个解决办法,但我正在寻找一个更有意义的解决方案,而不是设置一个arb值。我只是想知道为什么它会断裂
请提前感谢尝试在枚举值上添加属性。问题是属性的默认值
ColorEnum
不是枚举的有效值:创建MyObject
时,属性的默认值为0,0与枚举的任何值都不对应
您有多个选项来纠正此行为
- 您可以在枚举声明中使用
而不是Red=0
(甚至省略它,也会产生相同的效果)。这样,默认值将是红色,而不是无意义的值Red=1
- 您可以向枚举中添加默认值default=0,您知道该值将具有“尚未定义颜色”的含义
- 您可以将属性设置为可为null的
,因此null将成为该属性的法定值和默认值颜色?
- 您可以让
的构造函数为ColorEnum属性指定默认颜色 公共对象() { this.ColorEnum=Color.Red; }MyObject
但无论您做什么,枚举类型的默认值始终为0。如果0与合法的枚举成员不对应,则肯定会有问题。我的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
}
男人。。。枚举永远不适合使用服务公开…@AdilMughal为什么?Enum是一个很好的选择,并且肯定受到SOAP协议的支持。我同意他们是受支持的,但基于一些经验。。。签出stackoverflow帖子,对枚举的使用进行了一些很好的讨论是的,现在就这么做了。仍然不起作用-还有什么遗漏。我把[DataContract]放在枚举的上面aswell@nivensookharan请为枚举指定默认值。序列化程序无法为ColorEnum属性指定值,因为默认值为0,且枚举从1开始。因此,如果我添加一个枚举
default=0,
除了给属性一些没有实际意义的arb值之外,我没有办法克服默认值0吗?@nivensookharan:我已经用一些选项编辑了我的答案,你必须解决你的问题。
[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
}