2017-05-04 88 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