好的,我在尝试在我的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?
答案 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。
中