我有一个使用类层次结构的WCF服务。基类BaseService只有基本信息(go figure),我继承的类有扩展信息。 Service的一个属性是枚举。 BaseService具有DataContract属性集,其KnownType属性指向Service。
其中一个服务返回BaseService列表,但是当我调用它时,我从WCF收到错误。我已启用日志,可以看到错误与未设置的服务中的枚举有关。该服务不返回Service列表,而是返回BaseService列表,因此枚举在上下文中不应该相关。看起来WCF正在尝试返回Service列表,即使该方法返回BaseService列表。
错误消息是: 尝试序列化参数http://tempuri.org/:GetShallowServiceResult时出错。 InnerException消息'Enum value'0'对于类型'MyService.ServiceTypeEnum'无效,无法序列化。
我无法弄清楚为什么会这样?
更新 事实证明,我错过了将构造函数更改为使用BaseService类而不是继承的Service类。 WebService试图序列化一些未设置的枚举。现在就像一个魅力。
答案 0 :(得分:1)
你是如何宣布你的枚举的?你使用过以下模式吗?
public enum MyEnumeration
{
[EnumMember]
Value0 = 0,
[EnumMember]
Value1 = 1,
[EnumMember]
Value2 = 2
}
枚举时不需要[DataContract]属性,BTW。
答案 1 :(得分:0)
您需要添加将在ServiceKnownType声明中序列化的所有包含的枚举。
[ServiceContract]
[ServiceKnownType(typeof(MyEnum))]
public interface IMyService
{
[OperationContract]
ServiceMethod(MyEnum enom);
}