Jas*_*Alt 5 c# wcf enums serialization dictionary
我想请你帮忙.我有这里的字典的WCF反序列化问题,其中枚举类型用作键.
我有两个数据对象:
[DataContract]
public enum MyEnum : int
{
[EnumMember]
Value1 = 0,
[EnumMember]
Value2 = 1
}
Run Code Online (Sandbox Code Playgroud)
和
[DataContract]
[KnownType(typeof(MyEnum))]
public class ReturnData
{
[DataMember]
public IDictionary<Enum, string> codes;
}
Run Code Online (Sandbox Code Playgroud)
事实上,ReturnData类包含更多数据成员,但它们对我的示例并不重要.
这些数据对象由方法返回:
[OperationContract]
public ReturnData Method1()
{
ReturnData data = new ReturnData();
data.codes = new Dictionary<Enum, string>();
data.codes.Add(MyEnum.Value1, "stringA");
return data;
}
Run Code Online (Sandbox Code Playgroud)
当我从客户端调用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;反序列化正常工作并且数据从服务器端传输到客户端而没有问题.
谢谢你的帮助.
小智 3
在类的顶部添加一个KnownType属性。
using System.Runtime.Serialization;
[KnownType(typeof(MyEnum))]
[DataContract]
public class Foo {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |