要使用循环引用序列化对象,需要使用
DataContractSerializer
。这样做
-
添加
[DataContract(IsReference=true)]
到
Person
班
-
添加
[DataMember]
到您的财产
-
在构造函数中实例化列表
-
记住
using System.Runtime.Serialization;
所以你的课程应该是:
[DataContract(IsReference=true)]
public class PERSON
{
[DataMember]
public string Name { get; set; }
[DataMember]
public Genre Genre { get; set; }
[DataMember]
public List<PERSON> Parents { get; set; }
[DataMember]
public List<PERSON> Children { get; set; }
public PERSON(string name, Genre genre)
{
this.Name = name;
this.Genre = genre;
Parents = new List<PERSON>();
Children = new List<PERSON>();
}
}
要序列化:
var serializer = new DataContractSerializer(myFamily.GetType());
using (FileStream stream = File.Create(@"D:\Test.Xml"))
{
serializer.WriteObject(stream, myFamily);
}
要反序列化:
using (FileStream stream = File.OpenRead(@"D:\Test.Xml"))
{
List<PERSON> data = (List<PERSON>)serializer.ReadObject(stream);
}