Deserialize Abstract Classe
-
10-07-2019 - |
Pergunta
Eu tenho uma classe abstrata 'Servidor', que eu crio no meu JavaScript na minha interface do usuário e, em seguida, eu quero ter um método no meu serviço web que faz o seguinte:
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();
}
O problema que estou tendo é que o servidor não pode ser desserializado como é abstrato, eu preciso ter um método para cada Servidor tenho que herda do tipo concreto ou seja
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();
}
Eu realmente aprecio sua ajuda como eu não sou certo o que é a melhor solução
O erro exato que recebo é:
Instâncias de classes abstratas não pode ser criado.
Solução
WCF apoiará herança, mas você precisa para decorar o seu contrato de dados com o tipo conhecido attibute. Por exemplo:
[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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow