На самом деле C # (язык) не знает ничего о сериализации, но .NET (фреймворк) предоставляет множество способов ... 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);
}