Imagine que você tem um objeto e queira guardar ele em banco de dados ou em um arquivo XML no seu
estado atual.
Para isso precisaremos serializar o objeto jogando o valor
para uma string.
Temos o seguinte objeto:
public
class usuario
{
public string nome;
public string email;
public bool ativo;
}
Precisaremos criar dois métodos, um que pega um determinado
objeto e o transforma em string o outro fará o inverso.
public static string ParaString<T>(this
T valor)
{
XmlSerializer xml = new
XmlSerializer(valor.GetType());
StringWriter
retorno = new StringWriter();
xml.Serialize(retorno, valor);
return retorno.ToString();
}
public static object
ParaObjeto(string valor, Type tipo)
{
XmlSerializer xml = new
XmlSerializer(tipo);
var valor_serealizado = new
StringReader(valor);
return xml.Deserialize(valor_serealizado);
}
Vou criar uma instância dessa classe com o nome de u.
usuario u = new usuario();
u.nome = "Celso";
u.email = "czequim@gmail.com";
u.ativo
= true;
já temos o nosso objeto criado agora precisamos serealizar.
string retorno = ParaString<usuario>(u);
O conteúdo da variável retorno será:
<usuario
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<nome>Celso</nome>
<email>czequim@gmail.com</email>
<ativo>true</ativo>
</usuario>
Agora se você tem esse valor em uma string e quiser fazer o
inverso, transformar esse xml em um objeto. É só chamar o segundo método.
usuario Objeto =(usuario)
ParaObjeto(retorno, u.GetType());
Simples assim. :D
Se for um List o processo é o mesmo.
Veja o exemplo:
List<usuario>
usuarios = new List<usuario>();
for (int i = 0; i < 10; i++)
{
usuario u = new
usuario();
u.nome
= "Celso";
u.email
= "czequim@gmail.com";
u.ativo
= true;
}
string
retorno = ParaString<List<usuario>>(usuarios);
List<
usuario> Objeto =(List<usuario>)
ParaObjeto(retorno, usuarios.GetType());
simples assim também.... :D