簡體   English   中英

字典的WCF反序列化,其中枚舉類型是關鍵

[英]WCF deserialization of Dictionary where Enum type is key

我想請你幫忙。 我有這里的字典的WCF反序列化問題,其中枚舉類型用作鍵。

我有兩個數據對象:

[DataContract] 
public enum MyEnum : int
{
   [EnumMember]
   Value1 = 0,
   [EnumMember]
   Value2 = 1
}

[DataContract]
[KnownType(typeof(MyEnum))] 
public class ReturnData
{
   [DataMember]
   public IDictionary<Enum, string> codes;
}

事實上, ReturnData類包含更多數據成員,但它們對我的示例並不重要。

這些數據對象由方法返回:

[OperationContract]
public ReturnData Method1()
{
 ReturnData data = new ReturnData();
 data.codes = new Dictionary<Enum, string>();
 data.codes.Add(MyEnum.Value1, "stringA");

 return data;
}

當我從客戶端調用Method1然后拋出下一個異常:

格式化程序在嘗試反序列化消息時拋出異常:嘗試反序列化參數http://tempuri.org/:Method1Result時出錯。 設置InnerException信息是“錯誤在第1個位置522元素” http://schemas.microsoft.com/2003/10/Serialization/Arrays:Key “包含的數據的” http://schemas.datacontract.org/2004 / 07 / AMService:MyEnum的數據合同。 反序列化器不知道映射到此合同的任何類型。 將與“MyEnum”對應的類型添加到已知類型列表中 - 例如,通過使用KnownTypeAttribute屬性或將其添加到傳遞給DataContractSerializer的已知類型列表中。

知道如何定義ReturnData類來解決這個問題嗎?

注意:當我更改ReturnData成員codes以用作關鍵數據類型MyEnum而不是Enum public IDictionary<MyEnum, string> codes; 然后反序列化正常工作,數據從服務器端傳輸到客戶端沒有問題。

謝謝你的幫助。

在您的類的頂部添加KnownType屬性。

using System.Runtime.Serialization;

[KnownType(typeof(MyEnum))]
[DataContract]
public class Foo {

}

不應該這樣

data.codes = new Dictionary<Enum, string>();

data.codes = new Dictionary<MyEnum, string>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM