c# -在web服务上公开枚举类型

本文关键字:枚举 类型 服务 web | 更新日期: 2023-09-27 18:13:25

好的,我在试图通过我的webservice公开这个枚举类型时遇到了很大的问题。在公开自定义类方面,它的功能与我的自定义类不同。

服务端:

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

Clientside:

// 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与可空类型?

c# -在web服务上公开枚举类型

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

例如,

var value = EventReportType.EventAutoContract;

但一般来说,除非你需要,否则你不会将值赋给变量,你只会显式地使用它;例如,调用一个服务方法,该方法接受来自以下类型的enum值:

myServiceCall(EventReportType.EventAutoContract);

请注意,您也不需要显式地拼写DataContractAttribute,这可以简写为DataContract,此外,您可能还需要使用EnumMember属性来扩展每个enum成员。所以…

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

您可以在这里找到在数据契约中使用枚举类型的参考。最终,如果您的enum被正确定义并在公开给客户端的服务中使用,那么enum将被生成。

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

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

这至少会使它出现在wsdl.

正如之前在Stackoverflow上发布的:

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

见:http://msdn.microsoft.com/en-us/library/ms731923.aspx

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

"标记。