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가있는 [ProtoContract]를 사용하여 다른 기본 클래스를 만들려고했지만 작동하지 않았습니다. [ProtoInclude (1, typeof (UserSettings)]만으로 더미 기본 클래스를 작성하는 것은 정상적으로 작동했습니다. 언급하지 않았으므로 더미 기본 클래스를 추가하지 않고 상속을 "위조"하는 ProtoContract 옵션이 없습니다. 도움을 주셔서 감사합니다. – too