当前位置:  开发笔记 > 编程语言 > 正文

如何通过WCF实现继承的Dictionary

如何解决《如何通过WCF实现继承的Dictionary》经验,为你挑选了1个好方法。

我正在尝试实现一个用于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,而不是我正在寻找的不区分大小写的比较器.

我要求的帮助是要么修复我失败的尝试,要么是完全不同的方式来达到我声明的要求.任何解决方案都不应涉及将一个字典复制到另一个

谢谢



1> jezell..:

将CollectionDataContract添加到Dictionary类:

有关使用集合数据协定实现字典的更多信息,请查看以下链接:

http://msdn.microsoft.com/en-us/library/aa347850.aspx

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有