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