2011-04-16 51 views
0
public class Page 
{ 
    public List<Point> Points; 
    public List<Line> Lines; 

} 

public class Point 
{ 
    public double X, Y; 
    public Page Parent; 
} 

public class Line 
{ 
    public Point StartPoint; 
    public Point EndPoint; 
    public Page Parent; 
} 

在初始化线对象的时间它将检查起始点和终点在线的父。 我需要一个idead,可以序列化和反序列化页面(或保存并从文件中恢复它)对象,但它会导致cyrcular refrence ... 带我一些想法做到这一点... 谢谢....Net序列化想法需要

+1

难道你不能只使用.NET XML序列化?使用相当简单。 – 2011-04-16 16:52:10

+0

没有。例如,所有线对象的起点和终点必须引用那些处于父结构的点属性中的人。由你的理想,这不会发生。我说的是真的? – qiback 2011-04-16 16:57:31

回答

2

如果使用XML序列化,你可以标记,这将导致与XmlIgnore所以他们不会被序列化循环引用的属性,从而避免这一问题,即:

public class Point 
{ 
    public double X, Y; 
    [XmlIgnore] 
    public Page Parent; 
} 

public class Line 
{ 
    public Point StartPoint; 
    public Point EndPoint; 
    [XmlIgnore] 
    public Page Parent; 
} 

如果你真的需要自己的序列化,你可能有一个类似的属性 - 但我不会推荐重新发明轮子 - 只是使用已经内置的内容。

另外作为一个方面说明,你应该真的在你的类中使用属​​性而不是公共字段。

+0

我需要父对象refrences为当前点和线的父母的页面。 – qiback 2011-04-16 17:00:07

+0

@qiback:@Thomas Levesque有一篇关于这个特定主题的博客文章(通过序列化维护亲子关系):http://tomlev2.wordpress.com/2009/06/12/c-parentchild-relationship-and-xml - 序列化/ - 这可能对你有用 – BrokenGlass 2011-04-16 17:04:08

1

如果你想全图系列化,DataContractSerializer的能做到这一点,但只有在构造函数中启用preserveObjectReferences选项。就个人而言,我只是序列化向下的关系,并只修正父导航。