Serialisieren Generischen Typ über WCF-Service
Habe ich eine C# - Klasse wie folgt definiert:
public class GenericItem<T>
{
public List<T> Items { get; set; }
public DateTime TimeStamp { get; set; }
}
Erstelle ich eine Instanz dieser Klasse, auf meinem server. Ich bin dann zu versuchen, übergeben Sie es über den Draht über einen WCF-Dienst, wie hier gezeigt:
[OperationContract]
public GenericItem<MyCustomType> GetResult()
{
GenericItem<MyCustomType> result = BuildGenericItem();
return result;
}
Alles kompiliert einfach gut an dieser Stelle. Wenn ich "update service reference" in meinem Silverlight-app einen re-kompilieren, erhalte ich eine compile-time Fehlermeldung, die der folgenden ähnelt:
MyNamespace.GenericItemOfMyCustomType[Sonderzeichen] enthält keine öffentliche definition für "GetEnumerator'
Ich habe keine Ahnung, warum:
- Extra chars erscheinen. Die scheinen zu ändern, jedes mal wenn ich ein update der service Referenz.
- Wie man dieses Problem beheben.
Was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sleiman ist richtig, aber man kann Begrenzt Generika wie beschrieben in dieser Artikel, und Sie können in der Lage sein zu erreichen, was Sie wollen. Dies ermöglicht Ihnen das erstellen eines generischen Typs in den Dienst verfügbar machen. Aber die Verbraucher nicht sehen, es so allgemein wie der Typ angegeben, in den service-Betrieb.
Nicht definieren WCF-Verträgen, die sich auf generische Typ-Parameter. Generika sind
spezifisch für .NET, und mit Ihnen würde gegen die service-orientierte Natur der WCF. Allerdings, einen Daten-Vertrag kann unter anderem eine Sammlung als ein Datenelement, weil WCF bietet engagierten Marshalling Regeln für Sammlungen.
Als sleiman hat darauf hingewiesen, Generics werden nicht unterstützt-SOAP.
WCF-und Generika -> http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/79585667-6b97-4ce4-93fa-3a4dcc7a9b86
Verwandte Frage -> WCF. Service generischen Methoden
Können Sie die folgenden Aktionen auf der client-Seite statt mit der servicereference:
Werke für Generika.