首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的递归序列化

C#中的递归序列化
EN

Stack Overflow用户
提问于 2015-09-06 19:45:45
回答 1查看 3.9K关注 0票数 4

我需要将myFamily序列化成一个.xml文件,我真的不知道该如何做。

Enums.cs

代码语言:javascript
复制
public enum Genre {
    Male,
    Female
}

PERSON.cs

代码语言:javascript
复制
public class PERSON {
    public string Name { get; set; }
    public Genre Genre { get; set; }
    public List<PERSON> Parents { get; set; }
    public List<PERSON> Children { get; set; }

    public PERSON(string name, Genre genre) {
        this.Name = name;
        this.Genre = genre;
    }
}

Form1.cs

代码语言:javascript
复制
    private void Form1_Load(object sender, EventArgs e) {
        List<PERSON> myFamily = new List<PERSON>();

        PERSON Andrew = new PERSON("Andrew", Genre.Male);
        PERSON Angela = new PERSON("Angela", Genre.Female);
        PERSON Tina = new PERSON("Tina", Genre.Female);
        PERSON Jason = new PERSON("Jason", Genre.Male);
        PERSON Amanda = new PERSON("Amanda", Genre.Female);
        PERSON Steven = new PERSON("Steven", Genre.Male);

        Andrew.Parents.Add(Tina);
        Andrew.Parents.Add(Jason);

        Angela.Parents.Add(Tina);
        Angela.Parents.Add(Jason);

        Tina.Parents.Add(Amanda);
        Tina.Parents.Add(Steven);

        Jason.Children.Add(Andrew);
        Jason.Children.Add(Angela);

        Tina.Children.Add(Andrew);
        Tina.Children.Add(Angela);

        Amanda.Children.Add(Tina);

        Steven.Children.Add(Tina);

        myFamily.Add(Andrew);
        myFamily.Add(Angela);
        myFamily.Add(Tina);
        myFamily.Add(Jason);
        myFamily.Add(Amanda);
        myFamily.Add(Steven);

        // serialize to an .xml file
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-06 20:22:35

要序列化具有循环引用的对象,需要使用DataContractSerializer。这样做

  • [DataContract(IsReference=true)]添加到Person
  • [DataMember]添加到属性中
  • 在构造函数中实例化列表
  • 记住using System.Runtime.Serialization;

所以你的课应该是:

代码语言:javascript
复制
[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>();
    }
}

序列化:

代码语言:javascript
复制
var serializer = new DataContractSerializer(myFamily.GetType()); 
using (FileStream stream = File.Create(@"D:\Test.Xml")) 
{ 
    serializer.WriteObject(stream, myFamily); 
} 

去序列化:

代码语言:javascript
复制
using (FileStream stream = File.OpenRead(@"D:\Test.Xml"))
{ 
    List<PERSON> data = (List<PERSON>)serializer.ReadObject(stream); 
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32427593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档