À l'aide de StringWriter pour la Sérialisation XML

Je suis actuellement à la recherche d'un moyen facile pour sérialiser des objets (en C# 3).

J'ai googlé quelques exemples et est venu avec quelque chose comme:

MemoryStream memoryStream = new MemoryStream ( );
XmlSerializer xs = new XmlSerializer ( typeof ( MyObject) );
XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 );
xs.Serialize ( xmlTextWriter, myObject);
string result = Encoding.UTF8.GetString(memoryStream .ToArray());

Après la lecture de ce question je me suis demandé, pourquoi ne pas utiliser StringWriter? Il semble beaucoup plus facile.

XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();

Un autre Problème, c'est que le premier exemple XML générés je ne pouvais pas l'écrire dans une colonne XML de SQL Server 2005 DB.

La première question est: Est-il une raison pourquoi je ne devrais pas utiliser StringWriter pour sérialiser un Objet quand j'en ai besoin comme une chaîne de caractères par la suite? Je n'ai jamais trouvé un résultat à l'aide de StringWriter quand googling.

La seconde est, bien entendu: Si vous ne devriez pas le faire avec StringWriter (pour quelques raisons que ce soit), ce qui serait une bonne et correcte?


Plus:

Comme il a déjà été mentionné par les deux réponses, je vais aller plus loin dans le XML DB problème.

Lors de l'écriture dans la Base de données, j'ai obtenu l'exception suivante:

Système.Les données.SqlClient.SqlException:
Analyse XML: ligne 1, du caractère, 38,
incapables de changer l'encodage

Pour la chaîne

<?xml version="1.0" encoding="utf-8"?><test/>

J'ai pris la chaîne créée à partir de la XmlTextWriter et vient de mettre en xml il. Celui-ci ne fonctionne pas (ni avec le manuel de l'insertion dans la DB).

Par la suite j'ai essayé d'insertion manuelle (juste écrit INSERT INTO ... ) avec encoding="utf-16" qui a également échoué.
Retrait de l'encodage totalement fonctionné ensuite. Après ce résultat, je suis passé de retour à la StringWriter code et voila, il a travaillé.

Problème: je ne comprends vraiment pas pourquoi.

à Christian Hayter: Avec ces tests, je ne suis pas sûr que je dois utiliser de l'utf-16 pour écrire à la DB. Ne serait pas le réglage du codage UTF-16 (dans la balise xml) fonctionne alors?

  • Je vais sur l'expérience personnelle. SQL Server n'accepte que UTF-16, et si vous le passez à autre chose, vous êtes à la merci de SQL Server analyseur XML et ses tentatives pour convertir les données. Plutôt que d'essayer de trouver un moyen de tromper, je viens de passer en UTF-16 directement, ce qui sera toujours.
  • Comment écrivez-vous cela à la base de données? Êtes-vous en passant une chaîne de caractères ou un tableau d'octets, ou de l'écriture d'un ruisseau? Si c'est de ces deux dernières formes, vous devez vous assurer que votre déclarée encodage correspond à l'encodage de vos données binaires.
  • ouf. Le manuel de l'essayer j'ai fait une Requête dans le MS SQL Management Studio. Le "code" essais ont été écrits à une chaîne qui a été ensuite transmise à un O/R Mappeur qui écrit comme une chaîne de caractères (aussi loin que je pouvais suivre). En fait, je suis de passage de la chaîne qui a été créé dans les deux exemples donnés dans ma question.
  • Pour info aux lecteurs - près de doublons: stackoverflow.com/questions/384974/... et stackoverflow.com/questions/3760788/...
  • Je suis en train de changer ma accepté de répondre comme je le crois, il répond vraiment à ma question. Même si les autres réponses ont été de m'aider à continuer mon travail, dans le but de Stackoverflow, je pense, Salomon réponse sera aider les autres à mieux comprendre ce qui s'est passé. [Avertissement]: je n'ai pas trouvé le temps de vraiment vérifier la réponse.
InformationsquelleAutor StampedeXV | 2009-10-14