我正在嘗試實現與WCF一起使用的字典。我的要求是:如何通過WCF實現繼承的字典
- 實際(專用變量或基 類)類型相當於 字典
- 的Comparer =
System.StringComparer.InvariantCultureIgnoreCase
- 自定義(倍率/新)添加(鍵, 值)方法(以包括 驗證)。
- 覆蓋的ToString()
- 客戶機和主機都
我在由WCF主機和客戶端項目共享的公共項目中使用這個類試圖在使用相同類型的:
[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元件中的一個,我GE缺少KnownType異常。
- 我可以安全地返回ResultClass中的MyDictionary,但它不再是我的類型。它只是一個字典,不可鑄造成
MyDictionary
。還比較=System.Collections.Generic.GenericEqualityComparer<string>
,而不是我要找的不區分大小寫的比較器。
我要求的幫助是要麼修復我失敗的嘗試,要麼完全不同的方式來達到我聲明的要求。任何解決方案都不應涉及將一本字典複製到另一個字典。
感謝
是一個NetDataContractAttribute一個可行的選擇?也就是說,你能夠有保證可在客戶端和服務器端都與您的MyDictionary類相同的程序集的副本? – cfeduke 2008-11-06 02:33:16
感謝您回覆我的文章 - 但您還沒有回答:我發佈的代碼是否適合您的設置?或者它是否拋出異常(或不將數據帶回)? – 2008-11-06 21:40:50
馬克 - 我只有一次嘗試過你的測試。 clone.Data拋出一個空值異常。謝謝你的幫助,但是jezell指出了我的正確方向。 – chilltemp 2008-11-06 23:02:48