如何将学生类序列化?我正在读这个article,但如果我在下面的场景中实现它,我不知道什么是正确的方法。
public class Student
{
private string _studentNumber;
private string _lastName;
private string _firtName;
private List<Subject> _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<Subject> 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; }
}
}
答案 0 :(得分:9)
对于BinaryFormatter
,只需在[Serializable]
public class ....
即可
XmlSerializer
,没有;假设你想要元素
对于DataContractSerializer
(严格来说是3.0级),将[DataContract]
添加到班级,将[DataMember]
添加到属性
对于protobuf-net,只要每个DataContractSerializer
指定一个唯一的[DataMember]
,您就可以使用Order=
属性,或者您可以在课程中使用[ProtoContract]
,每个媒体资源上的[ProtoMember(n)]
代表唯一n
。
对于JavaScriptSerializer
(技术上为3.5),没有 - 它应该有用
对于Json.NET
,没有 - 它应该有效
其他选项包括实施ISerializable
或IXmlSerializable
,但坦率地说:您不需要这样做。
答案 1 :(得分:2)
通常我会序列化以制作我的对象的深层副本,而不实现IClonenable
接口。
在您的情况下,您可以使用
[Serializable()]
public class Student
{
// Your Class
}
制作扩展方法
public static class ExtensionMethod
{
public static T DeepClone<T>(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();