Actualmente estoy buscando una manera fácil de serializar objetos (en C# 3).Uso de StringWriter para la serialización XML
Busqué en Google algunos ejemplos y se acercó con algo como:
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());
Después de leer este question me pregunté, ¿por qué no usar StringWriter? Parece mucho más fácil.
XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();
Otro problema era que el primer ejemplo genera XML que no podía simplemente escribir en una columna XML de SQL Server 2005 DB.
La primera pregunta es: ¿Hay alguna razón por la que no deba usar StringWriter para serializar un Objeto cuando lo necesito como una cadena después? Nunca encontré un resultado usando StringWriter cuando busco en Google.
La segunda es, por supuesto: si no debería hacerlo con StringWriter (por cualquier motivo), ¿cuál sería una buena y correcta forma?
Adición:
Como ya se mencionó por ambas respuestas, voy a ir más lejos en el XML a DB problema.
Al escribir en la base de datos que tiene la siguiente excepción:
ParaSystem.Data.SqlClient.SqlException: de tratamiento de XML: línea 1, 38 caracteres, incapaz de cambiar la codificación
cadena
<?xml version="1.0" encoding="utf-8"?><test/>
Tomé la cadena creada desde el XmlTextWriter y sólo hay que poner como º xml antes de. Éste no funcionó (ni con la inserción manual en el DB).
Después intenté la inserción manual (simplemente escribiendo INSERT INTO ...) con encoding = "utf-16" que también falló. Eliminar la codificación totalmente trabajada en ese momento. Después de ese resultado cambié de nuevo al código de StringWriter y voilé, funcionó.
Problema: Realmente no entiendo por qué.
en Christian Hayter: Con esas pruebas no estoy seguro de tener que usar utf-16 para escribir en la base de datos. ¿No funcionaría entonces la configuración de la codificación a UTF-16 (en la etiqueta xml)?
estoy pasando por la experiencia personal. SQL Server solo acepta UTF-16, y si lo pasa de otra manera, estará a merced del analizador XML de SQL Server y sus intentos de convertir los datos. En lugar de intentar encontrar una forma de engañarlo , Simplemente lo paso UTF-16 directamente, que siempre funcionará. –
¿Cómo está escribiendo esto en la base de datos? ¿Le está pasando una cadena, o una matriz de bytes, o escribiendo en una secuencia? Si es cualquiera de estos últimos dos formas, debe asegurarse de que su codificación declarada coincida con la codificación real de sus datos binarios. –
phew. El manual intenté hacer como Query en el MS SQL Management Studio. Los intentos "codificados" se escribieron en una cadena que luego se pasó a un O/R Mapper que escribe como una cadena (hasta donde pude seguir). De hecho, le paso la cadena que se creó en los dos ejemplos que figuran en mi pregunta. – StampedeXV