gpt4 book ai didi

c# - 不能将可为空的小数添加到模型中

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:56 27 4
gpt4 key购买 nike

我们最近将我们的一个项目的 protobuf-net 从 2.0.0.668 升级到 2.3.2,现在我们在序列化其中一个对象时遇到了问题。

序列化 Dictionary<long, decimal?> 类型的属性时, protobuf网 抛出:

ProtoBuf.ProtoException: 'Data of this type has inbuilt behaviour, and cannot be added to a model in this way: System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, 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 中的可空小数,根据文档应该支持它。

最佳答案

这很可能是“ map ”检测中的一个故障(在 2.3 中添加),应该记录为一个错误;但是,我怀疑可以通过在此处禁用“ map ”支持来实现解决方法:

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

更新:这是一个 bug并固定在 2.3.4

关于c# - 不能将可为空的小数添加到模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com