Dot-Net
什麼是對像圖以及如何序列化一個對像圖
我最近一直在閱讀有關序列化的內容。我讀過,當我使用 XmlSerialization 時,我無法序列化對像圖。什麼是對像圖,為什麼我不能簡單地序列化它?
對像圖不是單個對象,而是一組相關對象。舉一個簡單的例子,考慮:
public class Node { public string Name {...} public Node Parent {...} public List<Node> Children {...} }每個孩子都知道父母(父母也知道孩子)。
問題是 xml 是一個基於對象屬性的樹……它只想遍歷它們 - 即使用簡單的父/子:
A(知道 B 是它的孩子)
- B(知道 A 是它的父節點)
這將序列化為:
<Node> <Name>A</Name> <!-- no Parent as A is the top node, so null --> <Children> <Node> <Name>B</Name> <Parent> <Node> <Name>A</Name> *** boom ***你可以看到我們回到了A,所以我們現在處於一個無限循環中。
XmlSerializer可以序列化數據樹,但不能序列化完整圖。您可以標記要忽略的屬性,例如:[XmlIgnore] public Node Parent {...}現在它可以工作了,但我們必須在
Parent之後修復它。相比之下,其他一些序列化程序可以處理圖形(
DataContractSerializer可以按需)。它通過針對唯一鍵跟踪對象來做到這一點 - 但是輸出不是您對正常 xml 的期望。