so markieren Sie eine Schnittstelle als DataContract in WCF
ich habe zwei Daten-Klassen, die nur Daten von Mitgliedern(keine Funktionen). Man ist CallTask der andere ist SmsTask. Diese beiden Klassen haben einige gemeinsame Eigenschaften wie ID, Tel. Ich habe diese gemeinsamen Eigenschaften in einem separaten interface-Klasse, und ich benutze dieses interface-Klasse in meinem Projekt, wenn es angemessen ist.
Jetzt habe ich ein WCFService, um mein Projekt zum Austausch von Daten zwischen clients und server. Betrachten Sie die folgende Klasse design:
public interface IGsmTask : IComparable
{
string TaskID { get; set; }
string SessionID { get; set; }
string Tel { get; set; }
}
class CallTask : IGsmTask
{
#region IGsmTask Members
public string TaskID { get; set; }
public string SessionID { get; set; }
public string Tel { get; set; }
#endregion
}
class SmsTask : IGsmTask
{
#region IGsmTask Members
public string TaskID { get; set; }
public string SessionID { get; set; }
public string Tel { get; set; }
#endregion
public string SmsText { get; set; }
}
in diesem design, ich möchte die host-CallTask, SmsTask, und IGsmTask der Kunden nutzen diesen service methots wie die folgenden;
[OperationContract]
public void AddTask(IGsmTask task)
{
}
habe ich versucht zu markieren, [DataContract] auf IGsmTask, aber es gibt mir complition Fehler. Isnt es methot, ich kann die Verwendung von Schnittstellen als DataContracts? Oder wie soll ich KnownAttributes Typen in diesem synerio?
Danke.
Dank Reniuz es scheint, dass ich nicht verwenden können Schnittstellen für diesen Zweck.
WCF ist ein message-basierte system - der client sendet eine XML-serialisierten Nachricht an den server. Als solche müssen diese Nachrichten werden Beton-Typen , können in XML serialisiert und vertreten mit einem XML-schema. Schnittstellen werden nicht in XML serialisiert ....
Gut die erste Sache, die ich tun würde, ist das erstellen der Klasse zum speichern von gemeinsamen Eigenschaften, nicht die Schnittstelle. Auf diese Weise sparen Sie mindestens 3 Zeilen in jeder abgeleiteten Klasse.
InformationsquelleAutor Fer | 2012-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich weiß ist die Verwendung von interfaces als datacontracts ist nicht möglich. Sie können eine Basis-Klasse, und fügen Sie knowntype-Attribute auf die anderen verfügen.
Da die Serialisierung basiert auf Objekt-Instanzen, ich denke, es gibt keinen direkten Weg, es zu tun.
InformationsquelleAutor daryal
Fer: Alles ist Möglich mit dem richtigen design.
Wenn das Problem ist:
einer Klasse ist ein Daten Vertrag
&&
1 oder mehrere seiner Eigenschaften muss eine Schnittstelle...
Das Problem ist, dass wenn die de-Serialisierung erfolgt --
Es gibt keine Möglichkeit zu drehen, werden die Daten in einer Klasse, die ICustomInterface.
Die Lösung ist die Erstellung einer konkreten Klasse, die macht die die Schnittstelle Implementieren, und warf die getter/setter des öffentlichen Eigentums (das ist der Typ, Schnittstelle) in einem privaten Anwesen von der konkreten Klasse.
InformationsquelleAutor Zack Weiner