可序列化的类
如何让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
,没什么 – 它应该工作
其他选项包括实现ISerializable
或IXmlSerializable
,但坦率地说:你不需要它。
通常我序列化以制作我的对象的深层副本而不实现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();