Ich versuche, ein Wörterbuch für die Verwendung mit WCF zu implementieren. Meine Anforderungen sind:
- actual (private Variable oder Basis Klasse) entspricht dem Typ Wörterbuch
- Komparator =
System.StringComparer.InvariantCultureIgnoreCase
- Custom (override/new) Add(key, Wert) Methode (zur Einbeziehung von Validierungen).
- Override ToString()
- Verwendung desselben Typs sowohl auf dem Client als auch auf dem Host
Ich habe versucht, diese Klasse in einem gemeinsamen Projekt zu verwenden, das von den WCF-Host- und Clientprojekten gemeinsam genutzt wird:
[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);
Ergebnisse:
- Wenn ich MyDictionary als eines der Elemente ParameterClass.Data.Value übergebe, erhalte ich eine fehlende KnownType-Ausnahme.
- Ich kann sicher MyDictionary in der ResultClass zurückgeben, aber es ist nicht mehr mein Typ. Es ist nur ein Dictionary, und kann nicht in
MyDictionary
. Auch comparer =System.Collections.Generic.GenericEqualityComparer<string>
nicht der von der Groß- und Kleinschreibung unabhängige Vergleicher, den ich suche.
Die Hilfe, um die ich bitte, besteht darin, entweder meinen gescheiterten Versuch zu korrigieren oder einen völlig anderen Weg zu finden, um meine Anforderungen zu erfüllen. Jede Lösung sollte nicht das Kopieren eines Wörterbuchs in ein anderes beinhalten.
Danke
0 Stimmen
Ist ein NetDataContractAttribute eine brauchbare Option? Das heißt, können Sie Kopien derselben Assembly mit Ihrer MyDictionary-Klasse sowohl auf der Client- als auch auf der Serverseite garantiert zur Verfügung stellen?
0 Stimmen
Danke für die Antwort auf meinen Beitrag - aber Sie haben nicht geantwortet: funktioniert der Code, den ich gepostet habe, mit Ihrer Einrichtung? Oder löst er eine Ausnahme aus (oder bringt die Daten nicht zurück)?
0 Stimmen
Marc - Ich habe nur 1 Versuch mit deinem Test gemacht. clone.Data hat eine Nullwert-Ausnahme geworfen. Vielen Dank für die Hilfe, aber jezell wies mich in die richtige allgemeine Richtung.