Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过WCF服务传递枚举_C#_Wcf - Fatal编程技术网

C# 通过WCF服务传递枚举

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时,服务才会工作。如果它没有设置,它就

我需要在我的WCF服务项目中定义一个项目中的枚举。我正在创建一个包含枚举和其他数据的对象。当我通过WCF服务将对象传递给客户机时,我会得到一个NotFound

枚举:

要传递的对象:

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将成为该属性的法定值和默认值
  • 您可以让
    MyObject
    的构造函数为ColorEnum属性指定默认颜色

    公共对象() { this.ColorEnum=Color.Red; }


但无论您做什么,枚举类型的默认值始终为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
}