2009-08-26 72 views

回答

13

protobuf-net目前依賴於具有無參數構造函數的工作。

但是這個構造函數不需要是公共的(it will use reflection if need be to invoke it),所以你可以定義所需的私有構造函數以供protobuf-net使用(添加一個關於爲什麼的註釋)並處理那裏的特定序列化相關問題。

這使得您的api的其餘部分無法構建「非法」實例。

Marc指出,如果你在談論最外層的消息對象,你也可以自己創建對象並調用Serializer.Merge。但是如果它需要創建一個對象(因爲它目前有一個空實例,或者對於列表/數組中的新項目),那麼它會查找默認的構造函數。

+0

何時調用無參數構造函數?其他字段更新之前? – mcmillab 2014-11-17 08:16:59

4

ShuggyCoUk使用無參數構造函數是正確的。

儘管如此 - 如果您正在討論最外層的消息對象,您也可以自己創建對象並致電Serializer.Merge。但是如果它需要創建一個對象(因爲它當前有一個null實例,或者對於列表/數組中的新項目),那麼它會查找默認構造函數。

,我還可以提供的一些屬性標記說「只是通過FormatterServices創建一個原始對象」,但這種感覺不必要的(帶私人蔘數的構造函數相比),並且可能無法在所有平臺上工作(Silverlight,CF等 - 可能存在問題)。

+0

我猜這是你已經做了什麼('FormatterServices')與SkipConstructor選項,這些天可用? – DeCaf 2016-04-15 07:47:25

+0

@DeCaf是的,就是這樣 – 2016-04-15 12:04:54

相關問題