我想请您帮忙。我在这里遇到字典的WCF反序列化问题,其中Enum类型用作键。

我有两个数据对象:

[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时,将引发下一个异常:



任何想法如何定义ReturnData类来解决此问题?

注意:当我将ReturnData成员codes更改为MyEnum而不是Enum public IDictionary<MyEnum, string> codes;用作关键数据类型时,反序列化可以正常工作,并且数据可以从服务器端传输到客户端,而不会出现问题。

谢谢你的帮助。

最佳答案

在类(class)的顶部添加KnownType属性。

using System.Runtime.Serialization;

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

}

09-06 01:46