C# - 在webservice上公开枚举类型

时间:2011-11-01 14:14:50

标签: c# web-services enums

好的,我在尝试在我的webservice上公开这个枚举类型时遇到了重大问题。在暴露它们方面,它的功能与我的自定义类不同。

服务器端:

[DataContractAttribute]
public enum EventReportType {EventAutoContract, DailyAutoContract, EventFunctionSheet }

客户机侧:

// For a custom class I would do:
ServerRef.MyClass maclass = new ServerRef.MyClass();
// but the following does not work.
ServerRef.EventReportType myenum = new ServerRef.EventReportType();
enum test = new ServerRef.EventReportType();

即使在WSDL中我也不认为它,所以如何让它正确曝光? 我将如何消费和使用它?

请查看我的其他问题以获得赏金:REST with nullable types?

3 个答案:

答案 0 :(得分:6)

因为类型是enum,所以不创建它的实例,您可以访问值的静态表示。

例如,

var value = EventReportType.EventAutoContract;

但总的来说,除非你需要,否则你不会将值赋给变量,你只需要明确地使用它;所以,比如说调用一个接受这种类型的枚举值的服务方法:

myServiceCall(EventReportType.EventAutoContract);

请注意,您也不需要明确拼出DataContractAttribute,这可以缩短为DataContract,同样,您可能需要增加每个enum成员EnumMember属性也是。所以......

[DataContract]
public enum EventReportType 
{
    [EnumMember]
    EventAutoContract, 
    [EnumMember]
    DailyAutoContract, 
    [EnumMember]
    EventFunctionSheet 
}

您可以在数据合同here中找到使用枚举类型的参考。最终,如果您的enum已正确定义并在服务中的某个地方使用,并且会向客户端公开,那么将生成enum

答案 1 :(得分:0)

正如之前在Stackoverflow发布的那样:

使用Common库应该没问题。枚举是可序列化的,不需要DataContract属性。

请参阅:http://msdn.microsoft.com/en-us/library/ms731923.aspx

“枚举类型。枚举(包括标志枚举)是可序列化的。可选地,枚举类型可以使用DataContractAttribute属性标记,在这种情况下,参与序列化的每个成员都必须使用EnumMemberAttribute属性标记”

答案 2 :(得分:0)

我没有找到任何直接在wsdl中公开类或枚举的属性。到目前为止,我发现的唯一方法是将其作为参数或webtthod的返回类型包含在内 - 这类似于:

[WebMethod]
public myEnum ExposeEnum()
{
    return myEnum.DefaultValue;
}

这至少会使它出现在wsdl。