Google.Protobuf 不允许属性为空
Posted
技术标签:
【中文标题】Google.Protobuf 不允许属性为空【英文标题】:Google.Protobuf dose not allow null for properties 【发布时间】:2020-04-16 16:20:35 【问题描述】:我在 ASPNETCore 之上使用 GRPC,也有这样的模型:
syntax = "proto3";
message Blob
string id = 1;
string path = 2;
问题是当我尝试将path
属性设置为null 时,它会抛出ArgumentException
。
只需运行此代码:
new Blob Path = null ;
结果成这样:
System.ArgumentNullException: Value cannot be null. (Parameter 'value')
at Google.Protobuf.ProtoPreconditions.CheckNotNull[T](T value, String name)
at Grpc.Blob.set_Path(String value)
【问题讨论】:
【参考方案1】:Protobuf 没有 null 的概念; proto3 将空字符串视为“默认,不发送”,这意味着null
和""
之间没有有效负载差异。所以:也许不要尝试发送null
?
或者:protobuf-net(通过 protobuf-net.Grpc 与 gRPC 一起工作,它只附加到 Google/Microsoft 位)在这里可以正常工作,并且由于它不与 proto3 绑定,因此可以将其用于区别对待null
和""
(将""
显式发送为零长度字符串,根本不发送null
)。 protobuf-net 不需要 .proto,但如果有的话:https://protogen.marcgravell.com/
【讨论】:
哎呀,我傻了,有道理,谢谢你的解释。以上是关于Google.Protobuf 不允许属性为空的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:“google.protobuf.pyext._message.RepeatedCompositeCo”对象没有属性“附加”
由于 SQL 异常错误,无法将电子邮件属性保存到 sql 中:“不允许空插入”,除非属性不为空??(ORM 代码优先)