Google.Protobuf не допускает нулевую дозу для свойств - PullRequest
2 голосов
/ 16 апреля 2020

Я использую GRP C поверх ASPNETCore, также есть модель, подобная этой:

syntax = "proto3";
message Blob {
    string id = 1;
    string path = 2;
}

Проблема в том, что, когда я пытаюсь установить свойство path в ноль, он выбрасывает 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 Ответ

1 голос
/ 16 апреля 2020

Protobuf не имеет понятия нуля; если proto3 рассматривает пустую строку как «по умолчанию, не отправлять», это означает, что между значениями null и "" разницы в полезной нагрузке нет. Итак: возможно, не пытайтесь отправить null?

В качестве альтернативы: protobuf- net (который отлично работает с gRP C через protobuf- net .Grp c, который просто подключается к битам Google / Microsoft) будет нормально работать здесь, и поскольку он не привязан к proto3, его можно заставить обрабатывать null и "" по-разному (отправляя "" явно как строку нулевой длины и не отправляя null на всех). Вам не нужен .proto для protobuf- net, но если он у вас есть: https://protogen.marcgravell.com/

...