Как заставить protubuf-net не учитывать значения массива по умолчанию при десериализации - PullRequest
0 голосов
/ 04 июля 2018

Я использую 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 не учитывать значения массива по умолчанию при десериализации?

1 Ответ

0 голосов
/ 04 июля 2018

Проблема здесь в том, что protobuf-net десериализует данные списка (и т. Д.) Путем добавления данных.

Решением является перемещение инициализации списка из ctor в конструктор с установкой атрибута SkipConstructor = true.

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

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