Google.Protobuf 属性不允许为 null

Google.Protobuf dose not allow null for properties

我在 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)

Protobuf没有null的概念; proto3 将空字符串视为 "default, do not send",这意味着 null"" 之间没有负载差异。所以:也许不要尝试发送 null?

或者:protobuf-net(它通过 protobuf-net.Grpc 与 gRPC 一起正常工作,它只附加到 Google/Microsoft 位)在这里也可以正常工作,因为它没有绑定到 proto3 ,可以使 null"" 区别对待(将 "" 显式发送为零长度字符串而不发送 null)。你不需要 protobuf-net 的 .proto,但如果你有的话:https://protogen.marcgravell.com/