2010-12-06 61 views
5

我有對象的非常複雜的網絡,我想序列化和不受信任的環境中反序列化(網絡瀏覽器,使用Unity 3D)。 Plain BinaryFormatter序列化工作正常,但反序列化與「訪問私有字段」錯誤崩潰。當我在本地運行時,它完美地工作。不可信的反序列化戰略

我不想讓我的代碼庫通過使我的所有私人領域的公共吮吸。如果不這樣做,讓反序列化在不受信任的環境中工作的最佳方式是什麼?我願意改變序列化方法,BinaryFormatter只是最簡單的入門。

UPDATE我不想阻止系列化訪問我的私人數據,我想允許系列化訪問我的私人數據,而不必把它公開,損害我的代碼封裝。

謝謝。

+0

這是一個asp.net應用程序? – TalentTuner 2010-12-06 03:22:36

+0

@Saurabh,no。它是unity3d,一個運行.NET的瀏覽器插件。 – luqui 2010-12-06 03:32:54

回答

0

好吧,如果你想防止序列化私有字段的訪問,您可能需要移動到XML序列化甚至JSON序列化的。

您可以通過將私有字段置於非序列化屬性上來阻止私有字段的序列化,但是當開發人員期望它們的字段包含有效值並且沒有考慮到這些字段值在傳輸時丟失這一事實時可能會遇到問題到Unity插件。

2

串行器如XmlSerializerJavaScriptSerializer對公衆成員工作,所以他們應該(十字架手指)在信任方面的工作可接受。如果你想要二進制文件,你也可以嘗試protobuf-net - 但我沒有積極地測試這個場景(它適用於像Silverlight這樣的東西,雖然它有一個相當挑剔的信任模型)。

如果你想堅持BinaryFormatter,但不希望它直接觸摸你的領域,你可以實現ISerializable,但手動做這些都是......痛苦的。答案

1

沒有真正回答我的問題(參見澄清更新)。我最終使用BinaryWriter編寫了自己的簡單序列化格式。最後,我意識到我所做的相當於爲我的課程手動實現了ISerializable界面。我不得不手動實現圖形serializatoin代碼。雖然不難,但有點微妙,它已爲我完成。對於將來有這個問題的人,如果沒有更好的答案,我建議手動實施ISerialzable