En realidad, C# (el idioma) no sabe nada sobre la serialización, pero .NET (el marco) ofrece un montón de maneras ... XmlSerializer
, BinaryFormatter
, DataContractSerializer
(.NET 3.0) - o también hay algunos frameworks de serialización hechos a medida.
Cuál utilizar depende de sus requisitos; BinaryFormatter
es fácil de usar, pero graba la información de metadatos del ensamblado en el archivo, lo que la hace no portátil (no se puede abrir en Java, por ejemplo). XmlSerializer
y DataContractSerializer
están basados principalmente en xml, lo que lo hace bastante portátil, pero bastante grande a menos que lo comprima.
Algunos serializadores de propiedad están a medio camino entre los dos; protobuf-net es un formateador binario (datos muy densos), pero que sigue un estándar portátil para el formato de datos (especificación de búferes de protocolo de Google). Si esto es útil depende de su escenario.
código típico (aquí usando XmlSerializer
):
XmlSerializer ser = new XmlSerializer(typeof(Foo));
// write
using (var stream = File.Create("foo.xml"))
{
ser.Serialize(stream, foo); // your instance
}
// read
using (var stream = File.OpenRead("foo.xml"))
{
Foo newFoo = (Foo)ser.Deserialize(stream);
}
XmlSerializer no puede serializar Dictionary. –
¿Quién dijo que esto es lo que @Coyote está usando? No es necesario votar a la baja, la respuesta no es * incorrecta *. Incompleto tal vez, pero solo una pista basta. Hay formas de XML de serializar un diccionario, si golpeas esa pared. – Tomalak
Veo un diccionario como una optimización de búsqueda interna que no necesita estar expuesta en los datos. es decir, si la clave del diccionario es una propiedad de su objeto, entonces está hinchando la carga al tenerla allí dos veces y tener el código de envoltura adicional. IMO es una práctica de codificador de arrastrar y soltar para serializar diccionarios. –