Moyen le plus facile pour sérialiser classe C# comme texte XML
Tout en essayant de répondre à une autre question, j'ai été la sérialisation d'un objet de C# pour une chaîne XML. Il a été étonnamment difficile; c'était le plus court extrait de code que je pouvais venir:
var yourList = new List<int>() { 1, 2, 3 };
var ms = new MemoryStream();
var xtw = new XmlTextWriter(ms, Encoding.UTF8);
var xs = new XmlSerializer(yourList.GetType());
xs.Serialize(xtw, yourList);
var encoding = new UTF8Encoding();
string xmlEncodedList = encoding.GetString(ms.GetBuffer());
Le résultat est correct:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfInt
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<int>1</int>
<int>2</int>
<int>3</int>
</ArrayOfInt>
Mais l'extrait est plus compliqué que je pense qu'il devrait être. Je ne peux pas croire que vous devez savoir à propos de l'encodage et MemoryStream pour cette simple tâche.
Est-il un moyen plus court de sérialiser un objet en chaîne de caractères XML?
OriginalL'auteur Andomar | 2009-11-15
Vous devez vous connecter pour publier un commentaire.
Un peu plus court 🙂
Bien qu'il y a un défaut avec cette approche qui mérite d'être souligné. Il va générer un
utf-16
en-tête que nous utilisons StringWriter de sorte qu'il n'est pas exactement équivalent à celui de votre code. Pour obtenirutf-8
en-tête de on doit utiliser un MemoryStream et un XmlWriter qui est une ligne de code supplémentaire:GetStringBuilder()
Merci, SQL Server accepté que la version UTF-8. Je suppose que c'est aussi simple que cela en C#...
Je n'avais pas vu cette question avant de... vous pouvez éviter une partie de ce code à l'aide de mon Utf8StringWriter classe. Voir stackoverflow.com/questions/3862063
OriginalL'auteur Darin Dimitrov
Écrire une extension de la méthode ou d'une classe wrapper/fonction pour encapsuler le code.
OriginalL'auteur Uwe Keim
Vous n'avez pas besoin de la
MemoryStream
, il suffit d'utiliser unStringWriter
:OriginalL'auteur Thomas Levesque