2009-03-30 4 views
0

Je reçois une erreur mentionnée ci-dessous lorsque j'appelle mon service WCF? Comment puis-je m'en débarrasser?Erreur de sérialisation WCF avec le contrat de données "ArrayOfstring"

Il y a eu une erreur en essayant de paramètre sérialisation http://tempuri.org/:MyWCFSvc.svc Le message InnerException était « Type « System.String [] » avec le nom de contrat de données « ArrayOfstring: http://schemas.microsoft.com/2003/10/Serialization/Arrays » ne devrait pas. Ajoutez tous les types non connus de manière statique à la liste des types connus - par exemple, en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus transmis à DataContractSerializer. '. S'il vous plaît voir InnerException pour plus de détails. *

J'ai essayé d'utiliser [ServiceKnownType (typeof (string []))] dans mon interface de service WCF, mais pas de chance

+1

Pouvez-vous fournir un échantillon du code qui est à l'origine de ce problème? –

Répondre

2

Un an de retard, mais j'eu le même problème et voici ce que vous devez l'serialzer ne voit pas faire

List<SomeClass> mylist = new List<SomeClass>(); 

DataContractSerializer dcs = new DataContractSerializer(mylist.GetType()); 
XmlWriter writer = XmlWriter.Create(sb, XWS); 
dcs.WriteObject(writer, query);  
writer.Close(); 

Le problème est quand vous construisez votre sérialiseur avec le typeof votre classe, comme un arrar, il ne voit qu'un seul objet.

Si trouvé en faisant cette première:

DataContractSerializer dcs = new DataContractSerializer(SomeClass.GetType()); 
XmlWriter writer = XmlWriter.Create(sb, XWS); 
dcs.WriteObject(writer, query[0]); // Only get the first record from linq to sql 
writer.Close(); 
+1

@KenL: merci de répondre, mais puisque l'OP n'a jamais posté le code qu'il utilisait, comment savez-vous que votre solution aurait résolu son problème? Tout ce que vous savez, c'est que vous avez reçu une exception similaire. Cela aurait pu être causé par quelque chose de tout à fait différent. –

0

Il n'y a aucune raison pour que vous ayez à KnownType un tableau de cordes. Le sérialiseur devrait déjà savoir à ce sujet, et les tableaux ne sont pas un problème. Je déplace des listes de choses dans la WCF sans problème. Pourriez-vous poster un échantillon représentatif de ce que vous faites?

0

La configuration des références de service sur votre client fournit des options «Type de données» qui vous permettent de spécifier différents types pour les types Collection/Dictionnaire. Quels paramètres avez-vous là-bas?

1

moi aussi eu les mêmes problèmes, mais après la OperationContract avec l'Admissibilité [ServiceKnownType(typeof(string[]))] et [ServiceKnownType(typeof(int[]))] résolu le problème.

Par exemple:

[ServiceContract] 
    public interface IReportService 
    { 
     [OperationContract] 
     [ServiceKnownType(typeof(string[]))] 
     [ServiceKnownType(typeof(int[]))] 
     bool GenerateReport(int clientId, int masterId, string reportType, int[] vtIds, DateTime initialDate, DateTime finalDate, 
          bool descending, string userName, string timeZoneId, bool embedMap, 
          object[] vtExtraParameters, object[] vtScheduleParameters, string selectedCriteria, 
          out long reportID, out int scheduleID, out string message); 
+0

Mon problème était que l'une des structures DataContract renvoyées comprenait un DataMember du type d'objet qui recevait habituellement un type de données intrinsèque (qui fonctionne), mais parfois une chaîne [] (qui échoue). Ajouter juste [ServiceKnownType (typeof (string []))] comme ci-dessus a résolu ce problème. – Andy

Questions connexes