2009-03-11 7 views
5

tengo una clase abstracta 'Servidor' que creo en mi JavaScript en mi interfaz de usuario y luego quiero tener un método en mi servicio web que hace lo siguiente:Deserialize Resumen Clase

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(); 
} 

El problema que estoy teniendo es que Server no se puede deserializar ya que es abstracto, ¿tengo que tener un método para cada servidor que tengo que hereda de la es decir, el tipo concreto

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(); 
} 

realmente agradecería su ayuda ya que no soy seguro cuál es la mejor solución

El error exacto que recibo es:

Las instancias de clases abstractas no pueden ser creados.

Respuesta

9

WCF admitirá la herencia, pero debe decorar su contrato de datos con el tipo de atributo conocido. Por ejemplo:

[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

Gracias por su respuesta, ¿puedo agregar varios KnowTypes? es decir [DataContract] [KnownType (typeof (cliente))] [KnownType (typeof (Empleado))] [KnownType (typeof (Alien))] clase de contacto { ... muy apreciada Phill –

+0

¿Esto también funciona con las clases de Resumen, puedo ver en su ejemplo que es una clase normal? Gracias de nuevo, Phill –

+0

Hola Phil, si quieres necesitar puedes agregar tantos atributos de KnownType como necesites. Todo depende de la profundidad de su cadena de herencia. HTH. Buena suerte. – stephenl