私は BinaryFormatter から Protobuf-net に移行中です (これまでのところ、ストレージ サイズと逆シリアル化時間の両方の点で大幅な改善が見られます)。
しかし、私が遭遇した問題は、 double?[] 配列がシリアル化されたのと同じ形式で逆シリアル化されないことです。null である配列内の値はすべて削除されます。つまり、[null、null、1、2、3、null] の 6 つの要素を持つ配列で開始すると、逆シリアル化後に [1 の配列になります。 、2、3]。私のプログラムでは、BinaryFormatter を使用した場合と同様に、シリアル化前とまったく同じ形式でこれらの配列を取得することが不可欠です。
私がこれまでに思いついた解決策の 1 つは、すべての要素に対して 2 つの配列を作成することです。1 つはすべての要素に値がある double[] の配列で、もう 1 つは元の値が null であったかどうかを記述するために使用できる bool[] の配列です。ただし、これは、さまざまな理由で非常に非効率的です。
以前の関連する質問で、ProtoMember に「SupportNull」オプションがある可能性があると言及されていましたが、これを実装する方法を明確に示しているドキュメントを見つけることができず、遊んで自分で解決できませんでした。
誰もが提供できるどんな助けも大歓迎です。