2009-03-11 17 views
5

ich eine abstrakte Klasse ‚Server‘, die ich in meinem JavaScript in meinem UI erstellen und dann möchte ich auf meiner Web-Service, ein Verfahren haben, das macht folgendes:Deserialize Abstrakte Klasse

public List<Database> GetDatabases(Server server) 
{ 
    Type type = server.GetType(); 
    Server x = null; 

    if (typeof (SqlServer2005Server).Equals(type)) 
    { 
     x = new SqlServer2005Server(); 
    } 

    // Return the Databases from the server 
    return x.GetDatabases(); 
} 

Die Frage, die ich bin ist, dass Server nicht wie abstrakten deserialisiert werden kann, ist, muss ich für jeden Server ein Verfahren haben muss ich haben, die von der konkreten Art dh

public List<Database> GetDatabases(SqlServer2005Server server) 
{ 
    // Return the Databases from the server 
    return SqlServer2005Serverx.GetDatabases(); 
} 

public List<Database> GetDatabases(OracleServer server) 
{ 
    // Return the Databases from the server 
    return SqlServer2005Serverx.GetDatabases(); 
} 

erbt ich würde schätzen wirklich Ihre Hilfe, wie ich nicht bin sicher, was ist die beste Lösung

Der genaue Fehler Ich erhalte ist:

Instanzen von abstrakten Klassen nicht erstellt werden kann.

Antwort

9

WCF unterstützt die Vererbung, aber Sie müssen Ihren Datenvertrag mit dem bekannten Typ attibute dekorieren. Zum Beispiel:

[DataContract] 
[KnownType(typeof(Customer))] 
class Contact 
{ 
    [DataMember] 
    public string FirstName 
    {get;set;} 

    [DataMember] 
    public string LastName 
    {get;set;} 
} 
[DataContract] 
class Customer : Contact 
{ 
    [DataMember] 
    public int OrderNumber 
    {get;set;} 
} 

HTH.

+0

Danke für Ihre Antwort, kann ich mehrere KnowTypes hinzufügen. dh [Datacontract] [Knowntype (typeof (Customer))] [Knowntype (typeof (Employee))] [Knowntype (typeof (Alien))] Klasse Kontakt { ... Much Geschätzt Phill –

+0

Wird dies auch mit abstrakten Klassen funktionieren, kann ich in Ihrem Beispiel sehen, dass es eine normale Klasse ist? Nochmals vielen Dank, Phill –

+0

Hallo Phil, wenn Sie möchten, können Sie so viele KnownType-Attribute hinzufügen, wie Sie benötigen. Alles hängt von der Tiefe Ihrer Vererbungskette ab. HTH. Viel Glück. – stephenl