2010-02-04 44 views
1

我們有一個通過實現ISerializable和使用BinaryFormatter來使用序列化的項目。我們正在轉向.net compact,它沒有BinaryFormatter類。我想知道我們是否可以使用ProtoBuf-Net。我們可以指示ProtoBuf-Net使用GetObjectData()進行序列化嗎?具體來說,我想了解如何使用Serializer.Serialize(SerializableInfo,ISerializable)函數。是否有可能使用ProtoBuf-Net和ISerializable機制?

新增 我看了看源代碼,我看到的是,儘管功能

Serializer.Serialize(SerializableInfo,T t),其中T是ISerializable的 不使用約束T是ISerializable的根本。爲什麼T被宣稱爲可以被ISerializable?

回答

2

支持ISerializable作爲將protobuf-net注入到使用BinaryFormatter的現有API中間的機制(例如,您可以這樣做以減少.NET遠程處理或(串行化)會話狀態。但是,這仍然導致在BinaryFormatter包裝中間的pb-net BLOB(特別是,bf標頭指定了具體的類型assembly-qualfied-name)。

重新提出有關約束的問題 - 這只是爲了指導使用;該API僅僅是意圖的被用作通過ISerializable注入BinaryFormatter的一部分。否則,最好只使用基於Stream的API。

如果您正在查看CF,那麼BinaryFormatter當然不再有用,但基於Stream的API沒有問題。它適用於CF,但您應該注意,對於具有許多類的模型,目前由於泛型的過度使用(「缺失方法」或其他)導致CF出現一些故障。好消息是,我正在對good progress進行一些重新設計,使其在較小的框架上更加穩定。

+1

嗨馬克, 感謝您回答這個問題。 現在我明白了該API的用途。它將在GetObjectData()中用於以proto-buf格式存儲結果數據。 – Charvak 2010-02-05 15:40:08

+0

@Charvak - 正確。 – 2010-02-05 16:25:47