Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wcf netdatacontractserializer异常序列化以枚举为键的idictionary_Wcf_Enumeration_Netdatacontractserializer - Fatal编程技术网

wcf netdatacontractserializer异常序列化以枚举为键的idictionary

wcf netdatacontractserializer异常序列化以枚举为键的idictionary,wcf,enumeration,netdatacontractserializer,Wcf,Enumeration,Netdatacontractserializer,我将NetDataContractSerialiser与WCF一起使用。这在我们所有的类型都被序列化的情况下运行良好。但是,我正在调用的服务正在生成以下异常 格式化程序在尝试反序列化消息时引发异常: 尝试反序列化参数时出错。InnerException消息是“反序列化程序无法加载要反序列化的类型,因为类型”System.Collections.Generic.EnumEqualityComparer`1[[Grafted.Common.DomainModel.Code.Enums.enumFun

我将NetDataContractSerialiser与WCF一起使用。这在我们所有的类型都被序列化的情况下运行良好。但是,我正在调用的服务正在生成以下异常

格式化程序在尝试反序列化消息时引发异常:

尝试反序列化参数时出错。InnerException消息是“反序列化程序无法加载要反序列化的类型,因为类型”System.Collections.Generic.EnumEqualityComparer`1[[Grafted.Common.DomainModel.Code.Enums.enumFundingParameterContextKey,Grafted.Common.DomainModel.Code,Version=14.0.71.0,Culture=neutral,PublicKeyToken=null]]在程序集“mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089”中找不到“”。 检查正在序列化的类型是否与正在反序列化的类型具有相同的约定,并且是否使用了相同的程序集。“。有关更多详细信息,请参阅InnerException

正在序列化的类的属性定义为

public IDictionary<enumFundingParameterContextKey, string>  Context { get; set; }
这是在另一个假设中定义的

当我用int替换枚举时,类反序列化没有问题。你知道为什么使用枚举会导致异常吗


使用NetDataContractSerializer的原因是为了使类型信息可用,并避免使用KnownType

尝试用
[DataContract]
而不是
[Serializable]
标记枚举。但客户端上的枚举类型似乎完全未知。

将枚举的基类型设置为非整数。e、 g.一个字节

例如:

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

详细信息见我的以下博文:

很遗憾,改用DataContract后运气不佳。还验证了客户端上的正确程序集。
[Serializable] public enum enumFundingParameterContextKey : byte
{
    [EnumMemberAttribute()]
    ClientId = 0,
    [EnumMemberAttribute()]
    EntitlementDefinitionId = 1
}