Ответ 1
Собственно, С# (язык) не знает ничего о сериализации, но .NET(framework) предоставляет множество способов... XmlSerializer
, BinaryFormatter
, DataContractSerializer
(.NET 3.0) - или есть несколько специализированных фреймворков сериализации.
Что использовать зависит от ваших требований; BinaryFormatter
прост в использовании, но записывает информацию о метаданных сборки в файл - делает его не переносным (например, вы не можете открыть его в Java). XmlSerializer
и DataContractSerializer
в основном основаны на xml, что делает его довольно портативным, но довольно большим, если вы не сжимаете его.
Некоторые проприетарные сериализаторы расположены на полпути между ними; protobuf-net является бинарным форматированием (очень плотные данные), но который следует за переносным стандартом для формата данных (спецификация буферов протокола Google), Будет ли это полезно, зависит от вашего сценария.
Типичный код (здесь используется 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);
}