Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Flavio Tajiri

Generics chamando classes dinamicamente (Type.GetType)

Recommended Posts

Criei uma classe para fazer a serialização de objetos em XML. Como tenho mais de 100 classes que podem ser serializadas eu utilizei generics:

public class Serializador<T> where T : class
{
  public static void Serialize(T objeto, string caminho) { ...  }

  public static T Deserialize(string caminho) { ... }
}
Implementando:

MihaClasse minhaclasse = new MinhaClasse();
Serializador<MinhaClasse>.Serialize(minhaclasse, "C:\\serializado1.xml");
Dessa forma funciona perfeitamente, entretanto, eu teria que escrever centenas de linhas verificando qual classe vai ser serializada (lembrando que são mais de 100 classes, 115 prá ser mais exato...)

Encontrei em fóruns de .NET a solução de passar a classe através de uma string pelo método Type.GetType(string):

Type tipo  = Type.GetType("MinhaClasse");
Serializador<tipo>.Serialize(minhaclasse, "C:\\serializado.xml");
Mas dessa forma aparece erro no <tipo> dizendo que não foi possível encontrar o tipo especificado, provavelmente porque estou passando um objeto e não uma classe.

Outros falaram em usar typeof mas assim também deu na mesma...

 

Alguém tem idéias?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não vai conseguir, isso que você está fazendo é o mesmo que:

Type tipo = Type.GetType("System.String");
tipo nome = "Guilherme Oenning";

Estranho, não?

Se você está declarando uma variável, você precisa saber o seu tipo. Se você não sabe, você usa object.

No seu caso você vai precisar fazer exatamente isso, usar object já que você não sabe o tipo da classe.

Eu acho que ficaria interessante você fazer duas versões dessa sua classe, uma com generic e outra sem. Assim, quando você souber o tipo da classe que você quer serializar, você usa a com generics. Se não souber, usa a sem generics.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.