j'ai un service qui implémente le DataMember suivant:problèmes avec WCF KnownType pour Dictionnaire
[DataMember]
public Dictionary<string, List<IOptionQueryResult>> QueryResultItems { get; set; }
J'ai la classe « OptionQuerySingleResult » qui hérite de IOptionQueryResult. Maintenant, je comprends que je dois faire le type de OptionQueryResult « connu » au service et donc essayé d'ajouter le KnownType de diverses manières:
[KnownType(typeof(Dictionary<string, OptionQuerySingleResult[]>))]
[KnownType(typeof(Dictionary<string, List<OptionQuerySingleResult>>))]
[KnownType(typeof(OptionQuerySingleResult)]
Cependant, aucune de ces approches a travaillé et sur le côté client I » soit l'échec de la désérialisation, soit l'arrêt prématuré de la requête par le serveur, provoquant une erreur de connexion interrompue.
Quelqu'un a-t-il une idée de la meilleure façon de faire fonctionner ce système? Je voudrais ajouter que si je change la définition de QueryResultItems pour utiliser le type concret, au lieu de l'interface, tout fonctionne très bien.
Merci,
Tom
Edit: L'exception que je reçois est:
Erreur dans la ligne 1 Position 524. Element 'http://schemas.microsoft.com/2003/10/Serialization/Arrays:anyType' contient des données d'un type qui correspond à la name ': OptionQuerySingleResult'. Le désérialiseur n'a aucune connaissance de tout type qui correspond à ce nom. Envisagez d'utiliser DataContractResolver ou ajoutez le type correspondant à 'OptionQuerySingleResult' à la liste des types connus, par exemple, en utilisant l'attribut KnownTypeAttribute ou en l'ajoutant à la liste des types connus transmis à DataContractSerializer.
Cependant, quand je regarde le proxy client qui svcutil génère, "OptionQuerySingleResult" est certainement défini dans ce:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="OptionQuerySingleResult", Namespace="")]
[System.SerializableAttribute()]
public partial class OptionQuerySingleResult : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
Malheureusement, cela ne semble pas fonctionner non plus.Ce qui est étrange cependant, si j'ajoute [KnownType (typeof (OptionQuerySingleResult)] et retourne une liste de IOptionQueryResult, au lieu du dictionnaire, cela fonctionne très bien. – TJF