gpt4 book ai didi

c# - 如何通过 WCF 实现继承字典

转载 作者:太空狗 更新时间:2023-10-29 20:04:08 24 4
gpt4 key购买 nike

我正在尝试实现一个用于 WCF 的字典。我的要求是:

  • 实际(私有(private)变量或基数类)类型等同于词典
  • 比较器= System.StringComparer.InvariantCultureIgnoreCase
  • 自定义(覆盖/新)添加(键,值)方法(包括验证)。
  • 覆盖 ToString()
  • 在客户端和主机上使用相同的类型

我曾尝试在 WCF 主机和客户端项目共享的公共(public)项目中使用此类:

[Serializable]
public class MyDictionary : Dictionary<string, object>
{
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<ParmData> Data{ get; set; }
/* More properties */
}

[OperationContract]
ResultClass DoSomething(ParameterClass args);

结果:

  • 当我将 MyDictionary 作为 ParameterClass.Data.Value 元素之一传递时,我得到了一个缺失的 KnownType 异常。
  • 我可以安全地在 ResultClass 中返回 MyDictionary,但它不再是我的类型。它只是一个字典,不能转换为 MyDictionary .还有比较器 = System.Collections.Generic.GenericEqualityComparer<string> ,而不是我正在寻找的不区分大小写的比较器。

我所寻求的帮助要么是解决我失败的尝试,要么是一种完全不同的方式来实现我规定的要求。任何解决方案都不应涉及将一本字典复制到另一本字典。

谢谢

最佳答案

将 CollectionDataContract 添加到 Dictionary 类:

有关使用收集数据契约(Contract)实现字典的更多信息,请查看此链接:

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

关于c# - 如何通过 WCF 实现继承字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com