我们最近将protobuf-net从2.0.0.668升级到2.3.2用于我们的一个项目,现在我们在序列化其中一个对象时遇到了问题。
序列化Dictionary<long, decimal?>
类型的属性时,protobuf-net
抛出:
ProtoBuf.ProtoException:&#39;此类型的数据具有内置行为,无法以这种方式添加到模型中:System.Nullable`1 [[System.Decimal,mscorlib,Version = 4.0.0.0,Culture =中立,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;
}
}
编辑:在不同问题中提出的答案不适用。这个问题不是关于Protocol Buffers中的小数,而是关于protobuf-net的新版本中可以为空的小数,这应该根据文档支持。