Serialize
SerializableAttribute
当一个类标记为SerializableAttribute 特性时,那么这个类就可以直接调用Serialize和Deserialize 函数进行类数据的序列化和反序列化。例如使用BinaryFormatter进行序列化时,一定要指定类的SerializableAttribute特性,否则运行时会报异常。但是,不是所有的类在序列化或反序列化时都需要SerializableAttribute特性,比如XmlSerializer序列化或反序列化就不需要该特性。
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void Main(string[] args)
{
Person person = new Person { Name = "John Doe", Age = 30 };
// Serialize the object to a file
using (FileStream fs = new FileStream("person1.dat", FileMode.Create))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, person);
}
// Deserialize the object from the file
using (FileStream fs = new FileStream("person1.dat", FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
Person deserializedPerson = (Person)formatter.Deserialize(fs);
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
}
// Serialize the object to a file
using (FileStream fs = new FileStream("person.xml", FileMode.Create))
{
XmlSerializer serializer = new XmlSerializer(typeof(Person));
serializer.Serialize(fs, person);
}
// Deserialize the object from the file
using (FileStream fs = new FileStream("person.xml", FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(Person));
Person deserializedPerson = (Person)serializer.Deserialize(fs);
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
}
Console.ReadKey();
}