Protobuf-net如何序列化List

本文关键字:List 序列化 Protobuf-net | 更新日期: 2023-09-27 18:37:27

这是我当前的序列化/反序列化代码

// SERIALIZE
using (var file = File.Create(@"..'..'SavedPCInfo.bin"))
{
    Serializer.Serialize(file, pcs);
}
//DESERIALIZE
if (File.Exists(FileName))
{
     using (var file = File.OpenRead(@"..'..'SavedPCInfo.bin"))
     {
          pcs = Serializer.Deserialize<List<PC>>(file);
     }
}

其中pcsPC对象的列表。到目前为止,我在反序列化时收到错误:

找不到适用于 PC 的无参数构造函数

我不知道为什么它需要一个无参数构造函数来反序列化,但我只是想让我的反序列化工作。关于如何实现这一目标的任何想法?我似乎在这里做错了什么。

Protobuf-net如何序列化List<T>

您有以下几种选择:

  1. PC 中创建私有无参数构造函数。它将在反序列化时调用。

  2. [ProtoContract(SkipConstructor = true)]属性应用于PC 。在这种情况下,对象将以未初始化状态实例化。

    请谨慎使用这个:如果在任何构造函数之外将类中的字段初始化为某些默认值,则不会进行这些初始化。

    例:

    [ProtoContract(SkipConstructor = true)]
    public class PC
    {
        private int _something = 42;
        public int Something { get { return _something; } }
        public PC(string foo)
        {
        }
    }
    

    在这种情况下,Something将返回反序列化对象的0

相关文章: