Один из традиционных способов сделать это - через классы System.Xml.Serialization
. Это позволяет вам сериализовать ваши объекты на диск и впоследствии десериализовать их. Это имеет некоторые ограничения: типы должны быть открытыми, иметь открытый конструктор без параметров и иметь атрибут XmlSerializer.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
[Serializable]
public class Cat
{
DateTime _dateOfBirth;
string _name;
public DateTime DateOfBirth
{
get { return _dateOfBirth; }
set { _dateOfBirth = value; }
}
public string Name
{
get { return _name; }
set { _name = value; }
}
public Cat() : this(DateTime.Now, "(Cat with no name)") { }
public Cat(DateTime dateOfBirth, string name)
{
this.DateOfBirth = dateOfBirth;
this.Name = name;
}
public override string ToString()
{
return string.Format("Name: {0}, DateOfBirth: {1}", Name, DateOfBirth);
}
}
class Program
{
static void Main(string[] args)
{
Cat originalCat = new Cat(DateTime.Now, "Fluffy");
XmlSerializer serializer = new XmlSerializer(typeof(Cat));
MemoryStream memStream = new MemoryStream(); // can be file stream
serializer.Serialize(memStream, originalCat);
memStream.Position = 0; // this is just here to make this code sample work, usually you
// you don't need to set your streams position manually
Cat deserializedCat = (Cat)serializer.Deserialize(memStream);
Console.WriteLine("originalCat.ToString(): {0}", originalCat.ToString());
Console.WriteLine("deserializedCat.ToString(): {0}", deserializedCat.ToString());
Console.ReadKey(true);
}
}
}
В общем, вы должны быть очень осторожными с такого рода сериализацией. Странность возникает, когда вы пытаетесь сериализовать / десериализовать объекты между различными версиями одной и той же сборки.
Изменить, чтобы добавить: Приведенный выше код будет сериализовать ваш объект в XML. Вы можете увидеть представление XML, заменив вашу MemoryString вместо StringWriter (вызовите метод stringWriterInstance.ToString () для прямого получения строки XML). Другие предложили использовать BinaryFormatter, который делает более или менее то же самое, но вывод является двоичным, а не текстовым.
Оба подхода являются допустимыми способами сериализации данных, все зависит от того, нравится ли вам больше работать с XML или двоичными данными.