2017-12-28 13 views
2

最近、私たちのプロジェクトの1つでprotobuf-netが2.0.0.668から2.3.2にアップグレードされました。 Nullable 10進数をモデルに追加できません

タイプ Dictionary<long, decimal?>のプロパティをシリアル化、いるProtobufネット 例外:

ProtoBuf.ProtoExceptionを:「この種類のデータは、作り付けの振る舞いがあり、このようにモデルに追加することはできません:システム。 Nullable`1 [[System.Decimalの、mscorlib、バージョン= 4.0.0.0、文化=中立、なPublicKeyToken = b77a5c561934e089]]

私は、これは、これは持っているタイプであるという事実に関係していることをオンラインで読みますprotobuf-netのデフォルトシリアライザ。しかし、これはバージョン2.0.0.668で動作し、小数点である他のプロパティは何の問題も生じません。私の場合、どうすればこの問題を解決できますか?

[ProtoContract] 
public class MyObject 
{ 
    [ProtoMember(1)] 
    public MyType TypeInstance { get; set; } 

    [ProtoMember(2)] 
    public Dictionary<long, decimal?> MyDictionary { get; set; } 

    [ProtoMember(3)] 
    public decimal Total { get; set; } 
} 
public class OtherClass 
{ 
    public static byte[] ToProto<T>(T input) 
    { 
     byte[] bytResults; 
     using (var stream = new MemoryStream()) 
     { 
      Serializer.Serialize(stream, input); 
      bytResults = stream.ToArray(); 
     } 
     return bytResults; 
    } 
} 

編集:別の質問で提案された回答は適用されません。この質問は議定書バッファーの小数点以下のものではなく、新しいバージョンのprotobuf-netの無効な小数点以下の桁数について書かれています。

+1

に固定されていることが唯一の理由のシリアル化がある場合辞書に10進数の値がないキーを格納しないのはなぜですか? – fredrik

+1

@fredrik - 'decimal'はすでにサポートされています(その答えは2008年であり、非常に古くなっています)。それはここでは問題ではありません。問題は 'Nullable 'です。 –

+0

@JustinNiessner kay、投票が取り下げられました。 – fredrik

答えて

0

これは "マップ"検出(2.3で追加)の不具合になる可能性が高く、バグとして記録する必要があります。しかし、私はを無効にすることで達成することができ回避策を疑う「マップ」ここでサポートされています。

[ProtoMember(2), ProtoMap(DisableMap = true)] 
public Dictionary<long, decimal?> MyDictionary { get; set; } 

更新:これはbugだったと2.3.4

+0

こんにちは@ marc-gravell、あなたの提案された回避策は、問題を解決するようではありません。 私はまだ同じエラーが発生します。 –

+0

@ andy.eは2.3.4以上で良いはずです –

関連する問題