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与可空类型?
因为类型是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属性"