2017-05-04 128 views
0

我有一個從基類繼承的繼承的設置類,我想的(de)分別連載(例如)如何停止使用Protobuf-Net繼承並直接使用繼承類?

[ProtoContract] 
[ProtoInclude(1, typeof(GlobalSettings))] 
[ProtoInclude(2, typeof(UserSettings))] 
public class BaseSettings 
{ 
} 

[ProtoContract] 
public class GlobalSettings: BaseSettings 
{ 
    [ProtoMember(1)] 
    public string TempPath { get; set; } 
} 

[ProtoContract] 
public class UserSettings: BaseSettings 
{ 
    [ProtoMember(1)] 
    public int UILanguage { get; set; } 
} 

唯一的問題是我不能承受失去的配置,可它的方式來完成如果UserSettings不再繼承自BaseSettings並且移動到另一個程序集以獨立使用,則(de)序列化仍然可能(通過某種轉換或不轉換)而無需訪問GlobalSettings類?

回答

1

繼承是序列化模型的基本組成部分,尤其是如果您曾經談論過Deserialize<BaseSettings>。如果你只有只有做的事情就像Deserialize<GlobalSettings>Deserialize<UserSettings>,那麼你也許可以刪除[ProtoInclude] s,但是這個問題就變成了宣告BaseSettings成員的子類型。有辦法做到這一點。

+0

我試圖創建另一個基類與[ProtoContract]只有一個屬性[ProtoMember(1)] UserSettings但它沒有工作。創建一個只有[ProtoInclude(1,typeof(UserSettings)]的虛擬基類,因爲你沒有提到它,所以我猜沒有ProtoContract選項會在不添加虛擬基類的情況下「僞造」繼承,謝謝你的幫助。 – too