可序列化的类

如何让Student class可序列化? 我正在读这篇文章,但如果我在下面的场景中实现它,我不知道什么是正确的方法。

public class Student { private string _studentNumber; private string _lastName; private string _firtName; private List _subjects; public Student() { } public string StudentNumber { get { return _studentNumber; } set { _studentNumber = value; } } public string LastName { get { return _lastName; } set { _lastName = value; } } public string FirstName { get { return _firtName; } set { _firtName = value; } } public List Subjects { get { return _subjects; } set { _subjects = value; } } } public class Subject { private string _subjectCode; private string _subjectName; public Subject() { } public string SubjectCode { get { return _subjectCode; } set { _subjectCode = value; } } public string SubjectName { get { return _subjectName; } set { _subjectName = value; } } } 

对于BinaryFormatter ,只需在public class ....之前添加[Serializable] public class ....

对于XmlSerializer ,什么都没有; 假设你想要元素,这应该工作正常

对于DataContractSerializer (严格来说是3.0类),将[DataContract]添加到类中,将[DataMember]到属性中

对于protobuf-net,只要每个[DataMember]指定一个唯一的Order= ,就可以使用DataContractSerializer属性,或者您可以在类上使用[ProtoContract] ,在每个属性上使用[ProtoMember(n)] ,以获得唯一的n

对于JavaScriptSerializer (技术上为3.5),没有 – 它应该工作

对于Json.NET ,没什么 – 它应该工作

其他选项包括实现ISerializableIXmlSerializable ,但坦率地说:你不需要它。

通常我序列化以制作我的对象的深层副本而不实现IClonenable接口。

在你的情况下你可以使用

 [Serializable()] public class Student { // Your Class } 

制作扩展方法

 public static class ExtensionMethod { public static T DeepClone(this T element) { MemoryStream m = new MemoryStream(); BinaryFormatter b = new BinaryFormatter(); b.Serialize(m, element); m.Position = 0; return (T)b.Deserialize(m); } } 

并称之为

 yourclassobject.DeepClone();