Carles Brugada

 – Notícies

Idiomes / Aparença

Sencillo serializador de Xml para C#

Pocas clases se me han hecho tan necesarias últimamente como ha sido un serializador en Xml.
La tecnología ya es multiplataforma y para la buena comunicación entre sistemas hacen falta protocolos estándares.

Xml y Json son buenos ejemplos de estándard de comunicación, pero el serializador de Javascript de C#.net no requiere ninguna especificación del tipo original para serializar o deserializar, por lo que no merece la pena crear una entrada en el blog para ello.

El algoritmo es sencillo, pero escribir siempre las mismas 5 líneas de código, cambiando solo el tipo de objeto es pesado:

using System.IO;
using System.Text;
using System.Xml.Serialization;

...

public static class Xml<T> where T : class
{
  public static string Serialize(T item)
  {
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    StringBuilder stringBuilder = new StringBuilder();
    TextWriter textWriter = new StringWriter(stringBuilder);
    xmlSerializer.Serialize(textWriter, item);
    return stringBuilder.ToString();
  }

  public static T Deserialize(string xml)
  {
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    TextReader textReader = new StringReader(xml);
    return (T)xmlSerializer.Deserialize(textReader);
  }
}



La implementación pasa a ser tan sencilla como una sola línea de código:

MyObject o;
...
string s = Xml<MyObject>.Serialize(o);
MyObject r = Xml<MyObject>.Deserialize(s);
return (o != r) && (o.Equals(r)); //it returns true, cause 'o' and 'r' are not the same instance, but they have the same values


Carles Brugada
© 2011 - 2017