2011-06-02 68 views
0

我正在使用NetDataContractSerialiser與WCF。這對我們所有類型的序列化都很有效。不過,我調用一個服務產生以下異常wcf netdatacontractserializer異常序列化idictionary與枚舉作爲鍵

格式化拋出一個異常,而試圖反序列化消息:

嘗試反序列化參數http://tempuri.org/:xmlServiceObjIN時出錯。 InnerException消息是'The deserializer can not load type to deserialize because type'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 
} 

其在另一個assmebly定義。

當我用int替換枚舉類deserialises沒有問題。任何想法爲什麼使用枚舉會導致異常?

之所以使用NetDataContractSerializer是爲類型信息可用,並且避免使用KnownType

回答

0

嘗試用[DataContract]代替[Serializable]標記枚舉。但它看起來像枚舉類型在客戶端上是未知的。

+0

可悲的是沒有運氣。在客戶端也驗證正確的程序集。 – Peter 2011-06-03 01:39:22

1

爲您的枚舉設置非整數的基本類型。例如一個字節。

例子:

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

細節都在我下面的博客文章:不斷變化的使用DataContract後dotnet-35-to-dotnet-40-enum