Visual Studio 从 gRPC .proto 文件自动生成代码

Visual Studio auto generated code from gRPC .proto file

我遇到了一个问题,似乎 Visual Studio 正在改变对象在 .proto 文件中的外观。

.proto 文件:concordium_p2p_rpc.proto

示例 - 这是在 .proto 文件中:

message BlockHash {
  string block_hash = 1;
}

在构建我的项目后,我想创建这个对象的实例,但是,对象中的 属性 现在称为“BlockHash_”,而不是 .原型文件。

如果我尝试将此对象序列化为 JSON,那么混淆就完成了...然后该属性现在称为“blochHash”...第三个名称。

所以在 .proto

{
    "block_hash": ""
}

变成 C#

BlockHash bh = new BlockHash()
{
    BlockHash_: ""
}

然后在序列化时

{
    "blockHash": ""
}

这是怎么回事?

好的,所以我在这篇文章中自己找到了这个问题的答案。

https://visualstudiomagazine.com/articles/2020/01/06/defining-grpc-messages.aspx

为什么 Microsoft 决定执行此重命名而不是仅仅保留 .proto 文件中的名称,这超出了我的理解范围,显然它引入了我认为不会出现的问题。

发生的事情是 Visual Studio 想成为所谓的东西的老板,因此它想重命名对象 BlockHash[ 的属性“block_hash” =24=] 通过将第一个字母设为大写,删除下划线并将下一个单词的第一个字母也设为大写 ​​=> "BlockHash".

但是,由于这是 class 本身的名称,这个名称可能有问题,因为 class 构造函数使用这个名称,因此 Visual Studio 修复了它自己的 dodo 添加一个拖尾下划线,导致名为“BlockHash_”的属性。

为什么哦,你为什么要做这些事?!....