sharp serialize serializar example deserializar c# xml-serialization

serializar - serializer c#



¿Puedo serializar XML directamente a una cadena en lugar de una secuencia con C#? (4)

Creé este método auxiliar, pero todavía no lo he probado. Se actualizó el código por los comentarios de orsogufo (dos veces):

private string ConvertObjectToXml(object objectToSerialize) { XmlSerializer xmlSerializer = new XmlSerializer(objectToSerialize.GetType()); StringWriter stringWriter = new StringWriter(); xmlSerializer.Serialize(stringWriter, objectToSerialize); return stringWriter.ToString(); }

Este ejemplo utiliza un StringWriter para mantener los datos serializados, luego, al llamar a ToString() obtiene el valor real de la string :

Person john = new Person(); XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person)); StringWriter stringWriter = new StringWriter(); xmlSerializer.Serialize(stringWriter, john); string serializedXML = stringWriter.ToString();

¿Hay alguna forma más fácil / más limpia de hacer esto? Todas las sobrecargas de Serialize() parecen usar un Stream o Writer.

ACTUALIZACIÓN: una pregunta similar acerca de la serialización de un IEnumerable a través de un Método de Extensión .


Diversión con métodos de extensión ...

var ret = john.ToXmlString()

public static class XmlTools { public static string ToXmlString<T>(this T input) { using (var writer = new StringWriter()) { input.ToXml(writer); return writer.ToString(); } } public static void ToXml<T>(this T objectToSerialize, Stream stream) { new XmlSerializer(typeof(T)).Serialize(stream, objectToSerialize); } public static void ToXml<T>(this T objectToSerialize, StringWriter writer) { new XmlSerializer(typeof(T)).Serialize(writer, objectToSerialize); } }


Más o menos su misma solución, simplemente usando un método de extensión:

static class XmlExtensions { // serialize an object to an XML string public static string ToXml(this object obj) { // remove the default namespaces XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(string.Empty, string.Empty); // serialize to string XmlSerializer xs = new XmlSerializer(obj.GetType()); StringWriter sw = new StringWriter(); xs.Serialize(sw, obj, ns); return sw.GetStringBuilder().ToString(); } } [XmlType("Element")] public class Element { [XmlAttribute("name")] public string name; } class Program { static void Main(string[] args) { Element el = new Element(); el.name = "test"; Console.WriteLine(el.ToXml()); } }


Parece que ningún cuerpo respondió realmente a su pregunta, que es no, no hay manera de generar una cadena XML sin usar una secuencia o un objeto de escritura.