Dot-Net

什麼是對像圖以及如何序列化一個對像圖

  • May 18, 2009

我最近一直在閱讀有關序列化的內容。我讀過,當我使用 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 的期望。

引用自:https://stackoverflow.com/questions/877157