Comment mettre en œuvre hérité d'un Dictionnaire de plus de WCF

Je suis en train de mettre en œuvre un dictionnaire pour une utilisation avec WCF. Mes besoins sont:

  • réelle (variable privée ou de la base de
    classe) type équivalent à
    Dictionnaire
  • Comparer
    = System.StringComparer.InvariantCultureIgnoreCase
  • Personnalisé (override/nouveau) Add(clé,
    valeur) méthode (à inclure
    validations).
  • Substituer ToString()
  • Utilisation du même type sur le client et l'hôte

J'ai tenté à l'aide de cette classe dans un projet commun partagé par la FMC de l'hôte et des projets du client:

[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);

Résultats:

  • Quand je passe la Mondictionnaire comme l'un des ParameterClass.Les données.Éléments de valeur, je reçois un manque KnownType exception.
  • Je peux revenir en toute sécurité Mondictionnaire dans le ResultClass, mais ce n'est plus mon type. C'est juste un Dictionnaire, et n'est pas moulage à MyDictionary. Également comparer = System.Collections.Generic.GenericEqualityComparer<string>, pas la casse comparer, je suis à la recherche d'.

L'aide que je demande, c'est de soit réparer ma tentative a échoué, ou d'une façon totalement différente à la réalisation de mes exigences énoncées. Aucune solution ne doit pas nécessiter la copie d'un dictionnaire à un autre.

Grâce

Est un NetDataContractAttribute une option viable? C'est, êtes-vous en mesure d'avoir des copies de la même assemblée avec votre Mondictionnaire classe de garantie disponible à la fois du client et du serveur?
Merci pour la réponse à mon post, mais vous n'avez pas répondu: est-ce que le code que j'ai posté travailler avec votre installation? Ou faut-il lever une exception (ou de ne pas apporter les données)?
Marc - je n'en ai fait 1 tentative avec votre test. clone.De données a généré une valeur nulle exception. Merci pour l'aide, mais jezell m'a orienté dans le bon sens.

OriginalL'auteur chilltemp | 2008-11-05