10
votes

Moyen plus facile de sérialiser la classe C # comme texte XML

Tout en essayant de répondre à une autre question, j'étais sérialisé un objet C # à une chaîne XML. C'était étonnamment fort; C'était l'extrait de code le plus court que je pourrais proposer: xxx

Le résultat est correct: xxx

mais l'extrait est plus compliqué que Je pense que ça devrait être. Je ne peux pas croire que vous devez connaître l'encodage et le mémoire Mémoire pour cette tâche simple.

existe-t-il un moyen plus court pour sérialiser un objet à une chaîne XML?


0 commentaires

4 Réponses :


0
votes

Écrire une méthode d'extension ou une classe d'emballage / fonction pour encapsuler l'extrait.


1 commentaires

Cela ne le rend pas particulièrement plus simple - il suffit de déménager la complexité (bien que cela implique un niveau de réutilisation).



21
votes

Un peu plus court: -)

var yourList = new List<int>() { 1, 2, 3 };
using (var stream = new MemoryStream())
{
    using (var writer = XmlWriter.Create(stream))
    {
        new XmlSerializer(yourList.GetType()).Serialize(writer, yourList);
        var xmlEncodedList = Encoding.UTF8.GetString(stream.ToArray());
    }
}


3 commentaires

Même plus court si vous ne faites pas getstringbuilder ()


Merci, SQL Server a accepté uniquement la version UTF-8. Je suppose que c'est aussi simple que possible en c # ...


@Andomar: Je n'ai pas vu cette question auparavant ... vous pouvez éviter une partie de ce code à l'aide de ma classe UTF8StringWriter. Voir Stackoverflow.com/Questtions/3862063



0
votes

Vous n'avez pas besoin du MemoryStream , utilisez simplement un StringWriter : xxx


1 commentaires

Qui sera utf-16, pas utf-8



1
votes

Tout simplement si vous souhaitez utiliser l'encodage UTF8, faites-le comme ça xxx

, puis utilisez stringwriterutf8 ingraissé de StringWriter comme celui-ci xxx


0 commentaires