0

我正在使用带有 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,版本=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

4

2 回答 2

1

将基本类型设为枚举的非整数。例如一个字节。

例子:

[Serializable] public enum enumFundingParameterContextKey : byte
{
    [EnumMemberAttribute()]
    ClientId = 0,
    [EnumMemberAttribute()]
    EntitlementDefinitionId = 1
}

详细信息在我的以下博客文章中:dotnet-35-to-dotnet-40-enum

于 2012-06-14T03:14:24.290 回答
0

尝试用[DataContract]而不是标记枚举[Serializable]。但看起来客户端上的枚举类型根本不知道。

于 2011-06-02T08:08:18.247 回答