協議緩存格式通常用作不透明格式,意思是:你不希望知道內部 - 典型場景爲,你只會加載它,進行更改並堅持。幸運的是,這種格式非常簡潔高效,因此這幾乎不是什麼問題。
作爲對比,你不會有編輯BinaryFormatter
數據的任何期望,而無需使用BinaryFormatter
,大多數人還是會用串行器來修改XML/JSON,因爲該格式是非常複雜,它不是值得嘗試寫出強大處理它的香草代碼。
但是!如果你是確定在沒有串行器的情況下處理protobuf數據,你也可以使用讀寫器API。這與XmlReader
/XmlWriter
一樣,假定您對底層規範有相當的瞭解,並且您仍然需要知道您感興趣的字段編號(儘管您不需要了解有關字段不是感興趣)。
如果你有一個非常具體的(即可運行)的例子,我可能會告訴你如何做到這一點。然而!我會建議最簡單的事情可能是模型。
但是,我有點不清楚爲什麼你需要「複製protobuf層次結構」。 Protobuf-net在默認使用情況下並不在乎一點點實際類型是什麼(只要它們符合合同)。如果情況是,你正在改變的DTO的,則:
- 是,在做危險的事情喜歡做重大更改到DTO會影響的東西 - 如果它赫斯特,停止這樣做(通常有同樣方便但安全的方法來改變一個DTO隨着時間的推移)
- 在很多情況下,您可以使用V2的
RuntimeTypeModel
功能來彌補2個版本之間的差異 - 通過有兩個不同的RuntimeTypeModel
配置(可能其中之一涉及替代品,或使用不同的屬性等)
雖然,我需要看到您正在嘗試解決的問題以進一步提供建議。
這是序列化爲「不透明」類型的代價。但是,如果存儲映射,那麼它可能是一個簡單的Map調度...? – 2012-06-07 20:15:39