我正在使用带有WCF的NetDataContractSerialiser。这适用于所有序列化的类型。但是,我正在调用的服务正在生成以下异常
格式化程序在尝试反序列化消息时抛出异常:
尝试反序列化参数http://tempuri.org/:xmlServiceObjIN时出错。 InnerException消息是'反序列化器无法加载要反序列化的类型,因为类型'System.Collections.Generic.EnumEqualityComparer`1 [[GrantEd.Common.DomainModel.Code.Enums.enumFundingParameterContextKey,GrantEd.Common.DomainModel.Code,Version = 14.0 .71.0,Culture = neutral,PublicKeyToken = null]]'在程序集'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中找不到。 检查被序列化的类型与被反序列化的类型具有相同的合同,并使用相同的程序集。有关更多详细信息,请参阅InnerException。
被序列化的类具有定义为
的属性public IDictionary<enumFundingParameterContextKey, string> Context { get; set; }
枚举的声明是
[Serializable]
public enum enumFundingParameterContextKey
{
[EnumMemberAttribute()]
ClientId = 0,
[EnumMemberAttribute()]
EntitlementDefinitionId = 1
}
这是另一个可以理解的定义。
当我用int替换枚举时,反序列化没有问题。使用枚举的任何想法都会导致例外吗?
使用NetDataContractSerializer的原因是为了使类型信息可用并避免使用KnownType
答案 0 :(得分:1)
为枚举设置基本类型为非整数。例如一个字节。
示例:
[Serializable] public enum enumFundingParameterContextKey : byte
{
[EnumMemberAttribute()]
ClientId = 0,
[EnumMemberAttribute()]
EntitlementDefinitionId = 1
}
详情请参阅我的以下博文:dotnet-35-to-dotnet-40-enum
答案 1 :(得分:0)
尝试使用[DataContract]
代替[Serializable]
来标记枚举。但看起来客户端上的enum类型是未知的。