2011-06-25 78 views
5

要使用protobuf-net序列化一個類,您需要提供類和屬性的屬性[ProtoContract]和[ProtoMember(n)] - 其中n是1,2,3,...,等等在Protobuf-net中,是否可以序列化非裝飾類?

Appart從克隆到類的鏡像,是否可以序列化/反序列化一個我們無法控制的類?

例如:

使用ProtoBuf;

  • Serializer.Serialize <異常>(OutputStream,exception);

  • Serializer.Serialize <元組<數據,異常> >(OutputStream中,dataWithPossibleException);

NB。說數據有[ProtoContract]/[ProtoMember],其他則沒有。

可能的方法:

  • 這將是很好,如果我們有這樣的工作就像擴展方法「擴展屬性」。 [不可能]
  • 本地複製類,然後序列化/反序列化之前,從對象複製到/ [,將工作,但工作效率下降]
  • 爲類生成外部原型文件/定義和存儲這資源? [人知道如何去嗎?]

回答

3

有在V2這裏選擇:

  • 可以配置RuntimeTypeModel告訴它有關的類型和成員,而不需要任何屬性
  • 的類型是非常尷尬的,可以提供代理以使序列化更容易(它必須具有到原始類型的轉換運算符)
  • 對於其中類型不是靜態類型的API,可以包括類型元數據的選項

現在,我認爲其中一些解決了您的一些觀點。如果你可以完全指定一個有問題的場景,我可能會更具體一些(或者考慮折磨代碼以使其工作的新方法)。

但要回答標題問題(非裝飾):是的,在第2版

+0

感謝您預測此需求!現在我選擇了代理選項,因爲我反編譯了這些小框架類並將它們放入我的程序集中。大多數情況下,我試圖堅持POCO,所以像這樣的一次性並不是什麼大不了的事情。我會檢查出新版本2的選項。 – sgtz

+0

@sgtz SetSurrogate方法應該使這個更直接方便 –

+0

btw:我有一個稍微老一點的v2版本。所以,我打擊更新svn,現在我可以序列化/反序列化<元組<數據,異常>>。另外,我必須刪除+ readd protobuf-net二進制文件。不知道這是關於什麼,但它現在工作很好。感謝您將此項目公開......並且也感謝Google。我應該提到,在這一點上,我仍然*使用我的Tuple副本,而不是System命名空間中的那個。 – sgtz

相關問題