2011-04-16 55 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選項。就個人而言,我只是序列化向下的關係,並只修正父導航。