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_”的属性。
为什么哦,你为什么要做这些事?!....
我遇到了一个问题,似乎 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_”的属性。
为什么哦,你为什么要做这些事?!....