Eu tenho o seguinte método para salvar um objeto em um arquivo:
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
Confesso que não o escrevi (apenas o convertei em um método de extensão que utilizou um parâmetro de tipo).
Agora, preciso que ele me devolva o xml como uma string (em vez de salvá-lo em um arquivo). Estou investigando, mas ainda não descobri.
Eu pensei que isso poderia ser realmente fácil para alguém familiarizado com esses objetos. Se não, eu vou descobrir isso eventualmente.
fonte
typeof(T)
versustoSerialize.GetType()
, faça-o, mas não na minha resposta. Obrigado.Eu sei que isso não é realmente uma resposta para a pergunta, mas com base no número de votos para a pergunta e a resposta aceita, suspeito que as pessoas estejam realmente usando o código para serializar um objeto em uma string.
O uso da serialização XML adiciona lixo de texto extra desnecessário à saída.
Para a seguinte classe
gera
A melhor solução é usar a serialização JSON (uma das melhores é o Json.NET ). Para serializar um objeto:
Para desserializar um objeto:
A sequência JSON serializada seria semelhante a:
fonte
Serializar e desserializar (XML / JSON):
fonte
Código Nota de segurança
Em relação à resposta aceita , é importante usar em
toSerialize.GetType()
vez detypeof(T)
noXmlSerializer
construtor: se você usar a primeira, o código cobrirá todos os cenários possíveis, enquanto o último falha algumas vezes.Aqui está um link com algum código de exemplo que motiva essa instrução, ao
XmlSerializer
lançar uma exceção quandotypeof(T)
é usado, porque você passa uma instância de um tipo derivado para um método que chamaSerializeObject<T>()
definido na classe base do tipo derivado: http: // ideone .com / 1Z5J1 . Observe que o Ideone usa o Mono para executar o código: a exceção real que você obteria usando o tempo de execução do Microsoft .NET tem uma mensagem diferente da mostrada no Ideone, mas falha da mesma forma.Por uma questão de exaustividade, posto aqui o exemplo de código completo aqui para referência futura, caso Ideone (onde publiquei o código) fique indisponível no futuro:
fonte
using (StringWriter textWriter = new StringWriter() {}
o fechamento / descarte adequado do objeto.using
declaração é o melhor amigo tanto para nós e para os nossos queridosIDisposable
implementação de objetos;)Meu 2p ...
fonte
fonte
Não consegui usar o método JSONConvert sugerido por xhafan
No .Net 4.5, mesmo após adicionar a referência de montagem "System.Web.Extensions", eu ainda não consegui acessar o JSONConvert.
No entanto, depois de adicionar a referência, você pode obter a mesma string usando:
fonte
Senti que precisava compartilhar esse código manipulado com a resposta aceita - como não tenho reputação, não posso comentar.
fonte
Em alguns casos raros, convém implementar sua própria serialização de String.
Mas isso provavelmente é uma péssima idéia, a menos que você saiba o que está fazendo. (por exemplo, serializando para E / S com um arquivo em lotes)
Algo assim faria o truque (e seria fácil editar manualmente / lote), mas tome cuidado para que mais algumas verificações sejam feitas, como se o nome não contenha uma nova linha.
fonte
[VB]
[C #]
fonte