我正在尝试实现一个用于WCF的字典.我的要求是:
实际(私有变量或基类)类型等同于Dictionary
Comparer = System.StringComparer.InvariantCultureIgnoreCase
自定义(覆盖/新)添加(键,值)方法(包括验证).
覆盖ToString()
在客户端和主机上使用相同类型
我试图在WCF主机和客户端项目共享的公共项目中使用此类:
[Serializable] public class MyDictionary : Dictionary{ public MyDictionary() : base(System.StringComparer.InvariantCultureIgnoreCase) { } public new void Add(string key, object value) { /* blah */ } public override string ToString() { /* blah */ } } [DataContract] [KnownType(typeof(MyDictionary))] [KnownType(typeof(object[]))] [KnownType(typeof(double[]))] [KnownType(typeof(string[]))] [KnownType(typeof(DateTime[]))] public class ResultClass { public object Value{ get; set; } /* More properties */ } public class ParmData { public object Value{ get; set; } /* More properties */ } [DataContract] [KnownType(typeof(MyDictionary))] [KnownType(typeof(object[]))] [KnownType(typeof(double[]))] [KnownType(typeof(string[]))] [KnownType(typeof(DateTime[]))] public class ParameterClass { public List Data{ get; set; } /* More properties */ } [OperationContract] ResultClass DoSomething(ParameterClass args);
结果:
当我将MyDictionary作为ParameterClass.Data.Value元素之一传递时,我得到了一个缺少的KnownType异常.
我可以安全地在ResultClass中返回MyDictionary,但它不再是我的类型.它只是一个字典,不能转换为MyDictionary
.还比较= System.Collections.Generic.GenericEqualityComparer
,而不是我正在寻找的不区分大小写的比较器.
我要求的帮助是要么修复我失败的尝试,要么是完全不同的方式来达到我声明的要求.任何解决方案都不应涉及将一个字典复制到另一个
谢谢
将CollectionDataContract添加到Dictionary类:
有关使用集合数据协定实现字典的更多信息,请查看以下链接:
http://msdn.microsoft.com/en-us/library/aa347850.aspx