2009-04-29 16 views
8

Ich erhalte den Fehler unten, wenn ich meinen WCF-Dienst anrufe. Was fehlt mir hier?Warum erhalte ich diese WCF-Fehlermeldung?

'System.String[]' with data contract name 
'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 
is not expected. Add any types not known statically to the list of known 
types - for example, by using the KnownTypeAttribute attribute or by adding 
them to the list of known types passed to DataContractSerializer.'. Please 
see InnerException for more details. 

{"There was an error while trying to serialize parameter 
http://tempuri.org/:myEntity. The InnerException message was 
'Type 'System.String[]' with data contract name 
'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 
is not expected. Add any types not known statically to the list of known 
types - for example, by using the KnownTypeAttribute attribute or by adding 
them to the list of known types passed to DataContractSerializer.'. 

Please see InnerException for more details."} 
+1

können Sie den Code an Ihren Service und/oder Client senden? –

+0

bin neu bei WCF ... myEntity ist ein C# -Geschäftsobjekt ... kannst du mir bitte mitteilen, wie und wo ich diesen Typ an DataContractSerializer liefere? –

Antwort

12

Von dem, was ich sammeln, haben Sie eine WCF-Funktion, die einen Parameter 'myEntity' genannt hat. Ich gehe davon aus, dass der Typ von myEntity eine benutzerdefinierte Klasse ist und mit dem DataContract-Attribut versehen ist, wie es sein sollte. Ich nehme auch an, dass der Typ von myEntity ein Mitgliedsfeld hat, das ein Zeichenfolgenarray ist. Nehmen wir an, dass all dies wahr ist (auch hier wäre es sehr hilfreich, wenn Sie Ihren Code posten könnten).

Normalerweise werden String-Arrays, d. H. String [], nur gut serialisiert. Aber in einigen Fällen (siehe here und here) müssen Sie es möglicherweise zu der Liste der bekannten Typen hinzufügen, damit WCF alles korrekt serialisiert.

Um dies zu tun, fügen Sie die folgenden Schritte aus:

[DataContract] 
[KnownType(typeof(string[]))] 
public class YourClassNameHere 
{ 
} 
+0

bang on target Matt ... funktioniert wie ein Charme! :-) Danke für deine Antwort! –

+0

Froh, dass es für dich funktioniert hat. –

+0

Was ist, bekomme ich diesen Fehler und ich habe keine benutzerdefinierte Klasse? Ich möchte nur einen Parameter übergeben, der zufällig eine Zeichenfolge [] ist. –

5

Sie haben nicht den Code geschrieben, so ist meine Antwort basiert auf der Annahme, dass Sie eine Klasse myEntity haben, das Sie zu serialisiert versuchen. Verwenden Sie ein KnownTypeAttribute für die Klasse

z.

[KnownType(typeof(myEntity))] 

Sie auf der folgenden MSDN-Link verweisen: KnownTypeAttribute

+0

danke für Ihre Antwort .... aber es hat nicht funktioniert für mich –

+0

Steve, können Sie bitte ein Beispiel Ihres Codes? –

0

Ja. Wie im vorherigen Beitrag erläutert, tritt das Problem auf, wenn Sie ein Array eines Typs übergeben (der als DataContract definiert ist). Sie müssen das Array dieser Klasse als separaten Typ definieren und als Datenkontrakt markieren.

Wont Werk`

[DataContract] 
Public class ABC{ 
} 

... 

SendData(ABC[]) 

`

Was funktioniert:

Public class Data{ public ABC[] prop{get;set;}} 
... 
SendData(Data); 
0

In meinem Fall nach dem Hinzufügen Attribut [Serializable] auf die MyEntity Klasse. Und dann kam das Problem mit der Serialisierung des Rollen-String-Arrays.

[BekannteTyp (typeof (string []))] arbeitete wie Magie!

Verwandte Themen