温故知新,机器人进化论之优雅处理层级嵌套的Protobuf文件(.proto)输出为C#代码

news/2026/1/19 17:11:26/文章来源:https://www.cnblogs.com/taylorshi/p/19502868

什么是Protobuf

image

简单来说,Protobuf是代码世界的“通用翻译官”

跨语言:它让C++ 的结构体能被C#读懂,就像JSON 一样,但比JSON更强大。

高性能:它传输的是二进制(0101...),比文本格式的JSON体积小得多,解析速度快10倍以上。

强契约:通过.proto文件定义数据结构,一旦定义好,类型就是安全的。

场景重现

假设我们的 C++ 工程目录结构如下,不仅有子文件夹,还有跨文件夹的引用(Import):

MyProject/
├── proto/                  <-- 【关键】这是 Proto 的根目录
│   ├── common/             <-- 公共基础库
│   │   └── geometry.proto  <-- 定义了 Point3D 等基础类型
│   └── robot/              <-- 具体的业务模块
│       └── status.proto    <-- 这里引用了 common/geometry.proto
└── MyCSharpApp/            <-- 我们的 C# 项目└── MyCSharpApp.csproj

基础文件:common/geometry.proto

syntax = "proto3";
package common;
option csharp_namespace = "SmartLogistics.Common";message Point3D {double x = 1;double y = 2;double z = 3;
}

业务文件:robot/status.proto

它引用了common目录下的文件

syntax = "proto3";
package robot;
option csharp_namespace = "SmartLogistics.Robot";// 注意这里的路径:它是基于 proto/ 根目录写的
import "common/geometry.proto"; 
import "google/protobuf/timestamp.proto";message VehicleStatus {string device_id = 1;// 直接使用了引用的类型common.Point3D current_location = 2; google.protobuf.Timestamp last_updated = 3;
}

解决方案

1、创建一个.Net的项目,把这些文件包括在其中

image

image

2、将proto目录整体放入项目中来

image

3、给当前项目安装Nuget依赖

  • Google.Protobuf
  • Grpc.Tools (编译工具)
  • Grpc.Net.Client (可选,如果涉及 gRPC 通讯)

image

image

4、双击当前项目进入项目文件编辑

image

添加一个ItemGroup节点

<ItemGroup><Protobuf Include="proto\**\*.proto"ProtoRoot="proto"GrpcServices="Client" />
</ItemGroup>

image

5、直接重新生成即可

image

这时候这些proto对应的.cs文件就在/obj目录下,如果你顺利看到你要的cs文件,说明前面的配置对了,如果没看到说明前面的配置有问题,尤其是注意刚才那个ItemGroup节点对应的路径哈。

image

6、使用

using System;
using Google.Protobuf.WellKnownTypes; // 用于 Timestamp
using SmartLogistics.Common;          // 自动生成的命名空间
using SmartLogistics.Robot;namespace MyCSharpApp
{internal class Program{static void Main(string[] args){// 创建一个复杂的嵌套对象var status = new VehicleStatus{DeviceId = "AGV-2026-X1",// 直接使用引用的 Point3D 类型CurrentLocation = new Point3D { X = 10.5, Y = 20.1, Z = 0 },// 使用 Google 标准时间戳LastUpdated = Timestamp.FromDateTime(DateTime.UtcNow)};Console.WriteLine($"设备 {status.DeviceId} 位置: ({status.CurrentLocation.X}, {status.CurrentLocation.Y})");// 序列化为二进制(模拟发送给 C++ 端)byte[] bytes = status.ToByteArray();Console.WriteLine($"序列化后大小: {bytes.Length} 字节");}}
}

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1184114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当我们的系统遇到mfc100u.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

基于MATLAB的红外与可见光图像融合代码实现(多种方法)

一、核心方法代码 1. 加权平均法(Weighted Average Fusion) 原理:通过调整红外与可见光图像的权重系数,生成融合图像。 代码: function fused = weighted_average_fusion(vis_img, ir_img, alpha)% 转换为灰度图v…

巴音郭楞蒙古自治州英语雅思辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 老周说教育

随着新疆留学教育需求的持续升温,巴音郭楞蒙古自治州作为新疆重要的交通枢纽和经济中心之一,学子对优质雅思培训的需求日益增长,雅思成绩已成为海外院校申请的核心语言凭证。当前,巴音郭楞蒙古自治州雅思培训市场机…

如何联系国内AI智能炒菜机器人?教你轻松搞定 - 真知灼见33

如何联系国内AI智能炒菜机器人?教你轻松搞定 在当今餐饮行业,AI智能炒菜机器人已经成为提升效率、降低成本和实现标准化运营的重要工具。本文将为您详细介绍如何联系国内领先的AI智能炒菜机器人供应商——黑菠萝科技…

成都雅思培训机构深度测评推荐:雅思提分课程全阶段适配机构口碑排名 2026 - 老周说教育

在成都郫都区、武侯区、锦江区、青羊区等核心区县,雅思备考已成为留学路上的 “拦路虎”。数据显示,2025 年中国大陆考生雅思均分仅 5.8 分,口语单项 5.4 分的短板尤为突出,成都考生同样面临机考适应障碍、AI 评分…

2026新年送礼选NMN必看!科学抗衰NMN礼品榜,从原料到吸收NMN哪个牌子好 - 资讯焦点

新年送礼别犯难,选NMN、NAD+产品抓住核心要点,就能避开“效果差、见效慢”的雷区,为亲朋好友送上一份贴心的健康好礼。其一,原料纯度与来源是品质根基。优先选高纯度、优质来源的产品,如天然酵母发酵提取、纯度达…

喀什地区英语雅思辅导机构推荐,2026权威出国雅思课程口碑排行榜 - 老周说教育

随着新疆留学教育需求的持续升温,喀什地区作为新疆西南部交通枢纽和对外开放门户,学子对优质雅思培训的需求日益增长,雅思成绩已成为海外院校申请的核心语言凭证。当前,喀什地区雅思培训市场机构数量逐步增多,教学…

小型工作室/微小企业真的需要部署NAS吗?其实可以这样做

最近小白思考了很多乱七八糟的事情&#xff1a;单纯折腾NAS&#xff0c;好像真的容易累&#xff0c;虽然折腾过程中真的很快乐&#xff0c;但是折腾完成之后会感到一阵的空虚…… 这时候小白明白了&#xff1a;是时候该转变思路了&#xff01;不再为了热爱而折腾&#xff0c;而…

当我们系统出现mfc110.dll找不到丢失文件问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

【单片机毕业设计】【dz-1153】基于单片机的泳池环境监测系统

一、功能简介项目名&#xff1a;基于单片机的泳池环境监测系统 项目编号&#xff1a;dz-1153 单片机类型&#xff1a;STM32F103C8T6 具体功能&#xff1a; 1、通过防水式DS18B20测量水温&#xff0c;当水温低于设置最小值&#xff0c;则开始加热&#xff0c;直到加热到设置最大…

2025年全国最好的花灯品牌推荐,营销花灯/拱门花灯/国风花灯/夜景布置灯/春节花灯/商场美陈花灯,花灯订做厂家哪家权威 - 品牌推荐师

随着文旅产业融合加速,花灯作为传统节庆与现代夜游经济的核心载体,正经历从“静态观赏”到“智能互动”的迭代升级。据行业白皮书显示,2024年国内花灯市场规模突破120亿元,其中生肖主题花灯占比达35%,成为景区、商…

iOS App 抓不到包时的常见成因与判断思路,结合iOS 调试经验

很多人第一次遇到 iOS 抓不到包&#xff0c;反应都很一致&#xff0c;重装证书、换端口、重启工具、再试一次。 但如果你做过几次真实项目&#xff0c;很快就会意识到一个事实&#xff1a; 抓不到包&#xff0c;本质上是网络路径不在你的位置上。 工具只是在某一层等请求经过&a…

2026年有实力的立库滑触线,堆垛机滑触线,电镀线滑触线厂家采购参考指南 - 品牌鉴赏师

引言在工业自动化不断发展的2026年,立库滑触线、堆垛机滑触线、电镀线滑触线等各类滑触线在众多行业中发挥着至关重要的作用。为了给广大采购商提供一份具有参考价值的厂家采购指南,我们依据国内相关行业协会公开的数…

巴音郭楞蒙古自治州英语雅思辅导机构推荐,2026权威出国雅思课程口碑排行榜 - 老周说教育

随着巴音郭楞蒙古自治州留学需求的持续增长,雅思成绩作为海外院校申请的核心语言凭证,成为众多学子留学路上的关键门槛。不少家长在为孩子选择雅思辅导机构时倍感困惑:核心教学资源集中于库尔勒市核心商圈,轮台县、…

【单片机毕业设计】【dz-1154】基于STM32单片机的智能水杯垫

一、功能简介项目名&#xff1a;基于STM32单片机的智能水杯垫 项目编号&#xff1a;dz-1154 单片机类型&#xff1a;STM32F103C8T6 具体功能&#xff1a; 1、通过DHT11检测当前环境的温湿度&#xff0c;根据环境温湿度自动调节间隔喝水时间&#xff0c;时间到达进行声光报警3声…

2026年星空型露营帐篷厂家权威推荐榜单:竹节灯笼帐篷/钟型帐篷/椭球帐篷/船屋帐篷/房式帐篷源头厂家精选

随着户外休闲场景的多元化发展,帐篷产品已从单一功能向专业化、场景化方向迭代。据行业数据显示,2025年国内户外帐篷市场规模达127亿元,其中星空帐篷、酒店露营帐篷等细分品类年增长率超35%。佛山好来居金属结构房屋…

2026年山东优质整售山庄推荐榜 - 资讯焦点

2026年山东优质整售山庄推荐榜 一、行业背景与推荐说明 据《2025年中国文旅康养产业发展白皮书》数据显示,2025年国内文旅康养市场规模突破8万亿元,年复合增长率达12.5%。 随着消费升级,私人度假、文旅康养、企业团…

【单片机毕业设计】【dz-1143】基于STM32的智慧牛舍养殖系统设计与实现

一、功能简介项目:基于STM32的智慧牛舍养殖系统设计与实现 项目编号&#xff1a;dz-1143 单片机&#xff1a;STM32F103C8T6 功能&#xff1a; 1、通过DHT11监测当前环境的温湿度&#xff0c;监测到温度小于最小值&#xff0c;自动控制加热&#xff0c;监测到温度大于最大值&…

CST仿真实例: 电-光调制器---PNP半导体负载,调制效率

与热光&#xff08;TO&#xff09;的温控材料原理不同&#xff0c;光电调制器&#xff08;EO-modulator&#xff09;是用电信号控制光信号。本案例基于硅光材料&#xff08;SiP&#xff09;、行波式&#xff08;Traveling Wave&#xff09;和马赫-曾德尔调制器&#xff08;Mach…

阿克苏地区英语雅思辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 老周说教育

随着新疆留学教育需求的持续升温,阿克苏地区作为新疆南部重要的经济文化中心,学子对优质雅思培训的需求日益增长,雅思成绩已成为海外院校申请的核心语言凭证。当前,阿克苏地区雅思培训市场机构数量逐步增多,教学资…