2011-10-03 50 views
5

發生的事情與我的追求彎曲protobuf網以我自己的意願..限制protobuf網繼承「樹」

我已經看到了一些問題,圍繞等等如何添加動態 子類序列化程序能夠編碼的子類..,如thisthis

我的情況有點不同,我有一個基類,可能會在後期有限的代碼中分類,我想序列化是BASE類,並完全忽略子類的字段/屬性。

我需要這個的原因是,後來當我反序列化數據時,子類的代碼將不可用,所以構建子類將不可能。

有沒有辦法限制/禁止子類序列化?

在我的情況下,我有一個列表,其中列表中的一些項目是DerivedClass。

我想找到一種方法,使protobuf網連載一切,BaseClass的和反序列化到BaseClass的,以及...

我試圖窺視到代碼中,但還沒有找到太有用的東西。

回答

2

通常,圖書館非常注重查找派生類 - 並將它們與基類區別開來。目前唯一的例外的是代理類,特別是Entity Framework和NHibernate。對於整理解決方案,添加某種「忽略子類」開關似乎很實用。不過,雖然不存在,一個很懶惰(和哈克)的方法是使用欺騙現有的處理NHibernate的,例如:

namespace NHibernate.Proxy { 
    interface INHibernateProxy {} 
} 
... 
public class SomeDerivedType : BaseType, INHibernateProxy {} 

這將自動序列化爲每BaseType。儘管如此,它確實有一絲虛假的作弊行爲。

+0

模糊的你在說什麼? ;)我認爲我會入侵源Coe,但感謝您的建議 – damageboy

+1

@damageboy如果您想爲此添加一些自定義機制,「TypeModel.ResolveProxies」值得一看。我不反對在這裏添加protobuf-net特定的API。 –

+0

就這樣,我們在這裏明確...您指向ResolveProxies的原因是因爲它在拋出異常之前作爲最後的手段從ThrowUnexpectedSubtype中調用? – damageboy