首页 > 解决方案 > 如何使protubuf-net在反序列化时不考虑默认数组值

问题描述

我使用 protobuf-net 版本 2.3.13。

简单代码:

[ProtoContract]
public class Data
{
    [ProtoMember(1)]
    public bool[] Flags = new bool[3] { true, true, true };
}

var data = new Data();
// change Flags for example so:
data.Flags = new bool[3] { false, false, false };
// serialize data to file
// deserialize value from file to newData
// now newData.Flags has six bool values { true, true, true, false, false, 
// false }
// but i need { false, false, false }

因为据我了解,protobuf-net 首先使用数组的默认值创建类的实例,然后从文件中添加但不替换其值。

是否可以让 protubuf-net 在反序列化时不考虑默认数组值?

标签: c#protobuf-net

解决方案


这里的问题是 protobuf-net 通过附加数据来反序列化列表(等)数据。

解决方案是使用设置属性 SkipConstructor=true 将列表初始化从 ctor 移动到构造函数。

[ProtoContract(SkipConstructor=true)]
public class Data
{
    [ProtoMember(1)]
    public bool[] Flags;

    public Data()
    {
        Falgs = new bool[3] { true, true, true }
    }
}

推荐阅读