如何使用 Protobuf.net C# 序列化自定义对象基础属性

Posted

技术标签:

【中文标题】如何使用 Protobuf.net C# 序列化自定义对象基础属性【英文标题】:How to serialize a custom object base properties using Protobuf.net C# 【发布时间】:2014-03-10 11:16:34 【问题描述】:

我有一个继承 PictureBox 控件的自定义类,当我反序列化对象时,我缺少所有基本属性,例如“名称”。这是课程。

    [ProtoContract]
[ProtoInclude(100,typeof(PictureBox))]
class Card : PictureBox
        
    [ProtoMember(1)]
    public string CardId  get; set; 

    [ProtoMember(2)]
    public string CardName  get; set; 

    [ProtoMember(3)]
    public string CardColor  get; set; 

    [ProtoMember(4)]
    public string CardType  get; set; 

    [ProtoMember(5)]
    public string CardRarity  get; set; 

    [ProtoMember(6)]
    public bool Tapped  get; set; 

    [ProtoMember(7)]
    public bool Revealed  get; set; 

【问题讨论】:

【参考方案1】:

如果您无法修改基类,一种可能性(未经测试)是揭示您需要什么:

[ProtoMember(8)]
public new string Name

    get  return base.Name; 
    set  base.Name = value; 

在制作我自己的控件(例如,我自己的Label)时,我正在使用这种技术将我自己的属性(或更改DefaultAttribute 值)应用于标准控件的某些属性,并且它似乎有效。

【讨论】:

【参考方案2】:

我的理解是,您可能还需要基类上的 [ProtoContract] 属性。 http://www.codeproject.com/Articles/642677/Protobuf-net-the-unofficial-manual

【讨论】:

是的,我认为这可能是我自己的答案,但我不知道如何编辑 Picturebox 的类文件。 我认为您可能需要某种包装器/适配器。 Doh.. 我以前从未经历过的事情。关于从哪里开始包装器/适配器的任何建议?

以上是关于如何使用 Protobuf.net C# 序列化自定义对象基础属性的主要内容,如果未能解决你的问题,请参考以下文章

列表的 Protobuf.net 对象图序列化

protobuf 和 List<object> - 如何序列化/反序列化?

如何最小化 Protobuf.NET 内存消耗

protobuf -net 不知道如何序列化 type = object 的数据成员

如何判断 protobuf.net 中的反序列化是不是失败?

Protobuf.net 异常 - 检查元数据时超时