【问题标题】:How to stop using Protobuf-Net inheritance and use inherited classes directly?如何停止使用 Protobuf-Net 继承,直接使用继承类?
【发布时间】:2017-05-04 14:47:50
【问题描述】:

我有一个继承自基类的继承设置类,我想单独(反)序列化(示例)

[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 类?

【问题讨论】:

    标签: c# inheritance serialization deserialization protobuf-net


    【解决方案1】:

    继承是序列化模型的基本组成部分,尤其是,如果您曾经谈论过Deserialize<BaseSettings>。如果你Deserialize<GlobalSettings>Deserialize<UserSettings>之类的事情,那么你也许可以删除[ProtoInclude]s,但随后问题就变成了宣布BaseSettings的成员进入子-类型。有办法做到这一点。

    【讨论】:

    • 我尝试使用只有一个属性 [ProtoMember(1)] UserSettings 的 [ProtoContract] 创建另一个基类,但它不起作用。仅使用 [ProtoInclude(1, typeof(UserSettings)] 创建一个虚拟基类效果很好。由于您没有提到它,我猜没有 ProtoContract 选项可以在不添加虚拟基类的情况下“伪造”继承。谢谢您的帮助。
    猜你喜欢
    • 2011-09-09
    • 2012-10-10
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多