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 代码优先)

如何描述 protobuf-net 中的 Any 类型?

基于google protobuf的gRPC实现

google protobuf 数据类型_理解Protobuf数据格式解析

No module named google.protobuf.