2017-05-04 13 views
0

私がしたいの基本クラスから継承継承した設定クラスを持っている(デ)(例)別に連載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から継承されず、別のアセンブリに移動されて独立して使用される場合、(または)何らかの変換があっても、GlobalSettingsクラスにアクセスできないシリアライゼーションは可能でしょうか?

答えて

1

継承は、Deserialize<BaseSettings>で話した場合、特にのシリアライズモデルの基本的な部分です。 の場合は、Deserialize<GlobalSettings>またはDeserialize<UserSettings>のようにすると、[ProtoInclude]を削除することができますが、問題はBaseSettingsのメンバーをサブタイプにアナウンスすることになります。それを行う方法があります。

+0

プロパティ[ProtoMember(1)] UserSettingsが1つしかない[ProtoContract]で別の基本クラスを作成しようとしましたが、機能しませんでした。 [ProtoInclude(1、typeof(UserSettings)]のみでダミーの基底クラスを作成するとうまくいきました。あなたはそれを言及していないので、ダミーの基底クラスを追加せずに継承を「偽造する」ProtoContractオプションはありません。 – too

関連する問題