2013-12-11 47 views
0

我有一種外鍵實現的,讓我班有一個領域是另一個對象的引用,然後它有獲取需求的其他對象的屬性:C#序列化和性能

[Serializable] 
public class MyClass { 
    private string otherId; 
    public SomeClass Other { 
     get { return SomeClass.GetById(otherId); } 
     set { otherId = value.id; } 
    } 
} 

現在,任何人都可以請解釋當我使用C#默認序列化序列化/反序列化這個類時會發生什麼(我想了解二進制和XML序列化請我)

+0

你試過了嗎? – Maess

+0

我想了解幕後發生的事情,而不僅僅是最終的結果。我的真實情況要複雜得多,這是一個簡單的例子。 – tbkn23

+0

簡單的答案是,無論目標格式如何,序列化程序都將調用您的getter,然後將Other Proerty序列化爲SomeClass。是否要拋出異常取決於omeClass.GetById的實際功能。 – Maess

回答

1

簡單的答案是,序列化程序,無論目標格式,將打電話給你的getter,然後將Other屬性序列化爲SomeClass。是否要拋出異常取決於SomeClass.GetById的實際情況。

SomeClass隱含爲可串行化,因爲它是可序列化對象的屬性。

+0

謝謝。所以我明白,序列化將調用getter,序列化結果,然後在反序列化時,將使用該序列化值調用setter。在我的情況下,私人字符串將被覆蓋相同的值兩次(ID)。 – tbkn23

+0

嗯......當我做了其他常規字段的類型SomeClass而不是屬性,它拋出一個異常,說SomeClass沒有標記爲可序列化... – tbkn23

1

其他ID和其他成員將被序列化/反序列化。

要停止其他屬性被序列化,可以使用該屬性的[IgnoreDataMember]屬性。

+0

謝謝,我想我會用這個屬性,然後只該字段將被序列化。 – tbkn23