3

如何使学生类可序列化?我正在阅读这篇文章,但如果我要在以下场景中实施它,我不知道什么是正确的方法。

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; }
    }
}
4

2 回答 2

9

对于BinaryFormatter, 只需[Serializable]public class ....

对于XmlSerializer,没有;假设您想要元素,那应该可以正常工作

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

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

对于JavaScriptSerializer(技术上 3.5),什么都没有——它应该可以工作

因为Json.NET,什么都没有-它应该工作

其他选项包括实施ISerializableor IXmlSerializable,但坦率地说:你不需要那个。

于 2012-05-08T06:05:54.843 回答
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();
于 2012-05-08T06:06:20.990 回答