2010-04-20 17 views
7

estoy escribiendo funciones comunes para serializar el objeto dado y lista <objeto> de la siguiente manera finacómo serializar Lista <object>

public string SerializeObject(Object pObject)// for given object 
{ 
    try 
    { 
     String XmlizedString = null; 
     MemoryStream memoryStream = new MemoryStream(); 
     XmlSerializer xs = new XmlSerializer(typeof(pObject)); 
     XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
     xs.Serialize(xmlTextWriter, pObject); 
     memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
     XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); 
     return XmlizedString; 
    } 
    catch (Exception e) { System.Console.WriteLine(e); return null; } 
} 

public string SerializeObject(List<Object> pObject)// for given List<object> 
{ 
    try 
    { 
     String XmlizedString = null; 
     MemoryStream memoryStream = new MemoryStream(); 
     XmlSerializer xs = new XmlSerializer(typeof(pObject)); 
     XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
     xs.Serialize(xmlTextWriter, pObject); 
     memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
     XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); 
     return XmlizedString; 
    } 
    catch (Exception e) { System.Console.WriteLine(e); return null; } 
} 

primero está trabajando. Si paso cualquier tipo, se está devolviendo correctamente la cadena xml.

CORRECCIÓN: Error de compilación ha ocurrido por segundo (Error:. No se puede convertir de List<MyType> a List<object>

que volver a escribir la segunda como sigue que resuelve mi problema ahora se serializando lo dado List<generic types>

..
private string SerializeObject<T>(T source) 
{ 
    MemoryStream memoryStream = new MemoryStream(); 
    XmlSerializer xs = new XmlSerializer(typeof(T)); 
    XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
    xs.Serialize(xmlTextWriter, source); 
    memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
    string XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); 
    return XmlizedString; 
} 
+2

@afin: tal vez no se dio cuenta, pero no debería usar 'new XmlTextWriter()' nunca más. Ha quedado en desuso en favor de 'XmlWriter.Create()'. Desde .NET 2.0. –

+0

@john: gracias – afin

+0

Puede consultar Fasterflect (http://fasterflect.codeplex.com), que incluye un método de extensión ToXml para objetos. Es unidireccional y, por lo tanto, podría no ser lo que necesita, pero funcionará para casi todos los objetos. –

Respuesta

1

https://weblogs.asp.net/rajbk/Contents/Item/Display/345

el código relevante del artículo:

private static string SerializeObject<T>(T source) 
{ 
    var serializer = new XmlSerializer(typeof(T)); 
    using (var sw = new System.IO.StringWriter()) 
    using (var writer = XmlWriter.Create(sw)) 
    { 
     serializer.Serialize(writer, source); 
     return sw.ToString(); 
    } 
} 
+0

@Raj: Gracias – afin

+1

enlace muerto ... no se puede llegar desde aquí – Brian

2

He intentado sus dos funciones sin muchos problemas. La única cosa que cambió fue esta línea:

XmlSerializer xs = new XmlSerializer(typeof(pObject)); 

a esto:

XmlSerializer xs = new XmlSerializer(pObject.GetType()); 

typeof() requiere un tipo real mientras que GetType() devuelve el tipo del objeto.

+0

@quagland: lo siento, mi pregunta ha sido corregida. Obtuve un error de compilación para el segundo, ya que pasé List como parámetro de entrada. Necesito esta función común debe ser compatible con todos los tipos. – afin

Cuestiones relacionadas