Frage

Ich habe einen WSE 3.0 -basierten Webdienst und eine Winforms -Clientanwendung, die die in den Referenzen dieses Dienstes definierten Typen nutzt, aber unterklassen sie, um zusätzliche Funktionen bereitzustellen, die vom Client erforderlich sind.

Wenn ich jedoch eine Instanz der Unterklasse zurück zum Webdienst übergehe, obwohl ich ausdrücklich zum ursprünglichen Typ zurückgegeben habe, bekomme ich das gefürchtete:

Verwenden Sie das Xmlinclude- oder Soapinclude -Attribut, um Typen anzugeben, die statisch nicht bekannt sind.

in Bezug auf meinen abgeleiteten Typ.

Code Zusammenfassung:

public class DefinedInReferenceCs
{ 
    // ... 
}

public class ClientSubclass : DefinedInReferenceCs
{
    // My extra stuff
}

public class MyClient
{
    public CallTheWebService(ClientSubclass  obj)
    {
        // obj is an instance of ClientSubclass,  cast as DefinedInReferenceCs
        svc.MyMethod((DefinedInReferenceCs)obj); 
        // Throws an exception complaining that ClientSubclass is not statically known
    }
}

Ich kann dies umgehen, indem ich explizit eine DefinedInReferenCecs -Instanz erstelle und eine tiefe Kopie der entsprechenden Felder durchführen. Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Da der XML -Serializer Reflexion verwendet, um mit Objekten zu arbeiten, können Sie nicht feststellen, dass Ihre Basisklassenreferenz auf eine Instanz Ihrer abgeleiteten Klasse verweist. Ja, Sie müssen verwenden XmlInclude.

OTOH, haben Sie überlegt, Teilklassen zu verwenden, um den ursprünglichen Proxy -Klassen Funktionen hinzuzufügen? Auf diese Weise brauchen Sie überhaupt keine abgeleitete Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top