Grpc自定义类型(含Decimal)

news2024/9/28 3:24:41

官方文档:https://learn.microsoft.com/zh-cn/dotnet/architecture/grpc-for-wcf-developers/protobuf-data-types

Proto文件目前所支持的数据类型有:
在这里插入图片描述

在官方文档中有提到,除以上数据类型外,还可以引用协议来指定“已知类型”扩展。比如:

  • 日期和时间
    c#类型DateTimeOffset、DateTime对应google.protobuf.Timestamp;TimeSpan类型对应google.protobuf.Duration
    引用:
    import "google/protobuf/duration.proto" ;
    import "google/protobuf/timestamp.proto";
    使用:

         message Meeting {
            string subject = 1;
       		google.protobuf.Timestamp time = 2;
     		google.protobuf.Duration duration = 3;
     		}
    
  • Guid
    Protobuf 不直接支持 Guid 类型,(在其他平台上称为 UUID 类型)。 它没有适用的已知类型。最佳方法是使用标准 8-4-4-4-12 十六进制格式(例如,45a9fda3-bd01-47a9-8460-c1cd7484b0b3)将 Guid 值作为 string 字段处理。 所有语言和平台都可以分析该格式。
    不要为 Guid 值使用 bytes 字段。 当 Protobuf 与其他平台(如 Java)交互时,字节序(维基百科的定义)的问题会导致行为不稳定。

  • 可为 null 的类型
    引用:import "google/protobuf/wrappers.proto";
    使用:

    message Person {
        google.protobuf.StringValue str= “Holle World”;
        google.protobuf.Int32Value age = 5;
        ...
        }
    
    
  • Decimal
    Proto文件时不支持decimal类型的,官方文档中有写如何创建自定义decimal类型
    以下演示自定义DecimalValue类型,将DecimalValue放入单独的proto文件供其他proto文件引用

    1、新建一个proto文件(我这里建立的文件名为:customTypes.proto)
    (命名不能与要定义的类型同名,包括大小写。例如我要自定义DecimalValue类型,我的proto文件不能取名为decimalvalue或者Decimalvalue,因为proto文件生成上下类cs文件的时候,会自动将package命名的首字母大写,如果命名与要定义的类型同名,则里面的类型名定义会被自动加后缀,后期建立公共方法的时候就找不到了)
    在这里插入图片描述
    在这里插入图片描述

    2、写好proto文件,添加服务引用后重新生成(如何添加服务引用上一篇<WPC调用Grpc>笔记中有写=>双击项目,写入Protobuf Include=“Protos\customTypes.proto” 和None Remove=“Protos\customTypes.proto” ),重新生成Grpc项目
    在这里插入图片描述

    3、在项目下新增一个cs公共方法,使自定义参数与decimal 类型之间进行转换
    (放在最外层,直接右键项目新增cs文件)
    将官方文档中的代码放进去,就可以了。需要注意:namespace CustomTypes; 命名空间是你的proto文件生成的cs文件名(例如:我的proto文件package是customTypes,步骤2里重新生成的时候自动生成的cs文件名是CustomTypes,所以我的公共方法引用的命名空间就是namespace CustomTypes;)
    在这里插入图片描述
    在这里插入图片描述

    4、使用自定义类型
    在需要用decimal类型的proto文件中,引用协议(和官方提供的引用方法一样)
    引用:
    import "Protos/customTypes.proto";
    我的customTypes.proto文件直接放在Proto文件夹下,如果你的存在别的文件夹,就写全就可以了,起始文件夹名称为项目下的一级目录
    使用:(用proto文件名.自定义类型命)

 message CustomerRebateInfo{
   string str=1;
   customTypes.DecimalValue total1=2;
   customTypes.DecimalValue jinE1=3;
}

---------End结束-----------

另外:客户端也一样,要把新增的proto文件和生成的cs文件放到客户端项目中。包括公共方法也要放过去,最好存放位置和服务端一致,避免出现意外。
这样就可以直接把customTypes.Decimal当作c#中的decimal使用了,无需再转换,在客户端使用也一样,可以把customTypes.Decimal就看做是decimal。

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

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

相关文章

UI设计师的发展前景是否超越了平面设计?

这是一个现代经济学的典型话题&#xff1a;应该跟随趋势追逐风口&#xff0c;还是坚守成熟的“夕阳产业” UI 设计行业发展短短不过 20 多年&#xff0c;但平面设计这个“夕阳产业”最早可以追溯到上世纪的二三十年代。显而易见的答案是&#xff0c;更新兴的 UI 设计师得到的好…

PaddleX:一站式、全流程、高效率的飞桨AI套件

随着ChatGPT引领的AI破圈&#xff0c;各行各业掀起了AI落地的潮流&#xff0c;从智能客服、智能写作、智能监控&#xff0c;到智能医疗、智能家居、智能金融、智能农业&#xff0c;谁能快速将AI与传统业务相结合&#xff0c;谁就将成为企业数字化和智能化变革的优胜者。然而&am…

Mybatis的关联关系映射以及自定义resultMap三种映射关系

目录 经典面试题&#xff1a; 一&#xff0c;关联关系映射 二&#xff0c;具体步骤&#xff1a; 总结 前言&#xff1a; 今天我们来学习Mybatis的关联关系映射以及自定义resultMap三种映射关系&#xff0c;希望这篇博客可以帮助大家的学习工作&#xff01;&#xff01;&…

1998-2014年工业企业数据库和绿色专利匹配

1998-2014年工业企业数据库绿色专利匹配 1、时间&#xff1a;1998-2014年 2、样本量&#xff1a;470万 3、来源&#xff1a;工业企业数据库、国家知识产权局、WIPO 4、指标&#xff1a; 企业匹配唯一标识码、组织机构代码、企业名称、年份、法定代表人、法定代表人职务、行…

JS-17--深拷贝跟浅拷贝的区别?如何实现一个深拷贝?

1、数据类型存储 JavaScript中存在两大数据类型&#xff1a; 基本类型 引用类型 基本类型数据保存在栈内存中 引用类型数据保存到堆内存中&#xff0c;引用数据类型的变量是一个指向堆内存中实际x对象的引用&#xff0c;存在栈中 2、浅拷贝 浅拷贝指的是创建新的数据&#xff…

基于SSM的小型企业办公自动化系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

第二证券:为什么a股放开做空机制?

对于很多一般出资者来说&#xff0c;做空股票是一件十分复杂和困难的工作&#xff0c;可是对于专业的出资者和组织来说&#xff0c;这供给了一个愈加自由的商场买卖环境。那么&#xff0c;为什么A股放开做空机制呢&#xff1f;我们从多个视点来分析&#xff1a; 视点一&#x…

谷歌seo技术流

很多外贸企业和独立站都想从Google获得免费的流量&#xff0c;也就是SEO流量&#xff0c;但是在做SEO的过程中&#xff0c;总会面临这样或那样的问题。米贸搜谷歌推广将这些问题总结如下&#xff1a; 既然SEO看起来似乎很难&#xff0c;但还是有很多电商公司愿意投资SEO&#x…

Nosql数据库服务之redis

Nosql数据库服务之redis 一图详解DB的分支产品 Nosql数据库介绍 是一种非关系型数据库服务&#xff0c;它能解决常规数据库的并发能力&#xff0c;比如传统的数据库的IO与性能的瓶颈&#xff0c;同样它是关系型数据库的一个补充&#xff0c;有着比较好的高效率与高性能。 专…

CSAPP的Lab学习——Archlab(Architecture Lab)

文章目录 前言一、A部分sum .ys&#xff1a;迭代求和链表元素写一个Y86-64的程序和。rsum .递归求和链表元素copy.ys 复制将源块复制到目标块 二、B部分三、C部分实现iaddq指令 总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。刚刚看完CSAPP&#xff0c;真是一本神…

Android发布依赖到 Jitpack

前言 我们在日常开发中&#xff0c;经常会用到第三方开源的库文件&#xff0c;有的来自JCenter&#xff0c;Maven Central&#xff0c;google等。但是随着JCenter的弃用&#xff0c;现在用的最多的还是Maven Central&#xff0c;google。今天我们就自己亲自发布一个依赖。 现…

三秋农忙,自动驾驶农机保驾护航

“三秋”&#xff08;收获、播种、整地&#xff09;是一年中重要而忙碌的农事季节&#xff0c;水稻、棉花、玉米等农作物收获时期&#xff0c;也是小麦、蔬菜等秋种的好时间&#xff0c;还是各类农作物进入秋管的重要期。 随者农业科技发展&#xff0c;北斗导航农机自动驾驶系…

Json“牵手”唯品会商品详情数据方法,唯品会商品详情API接口,唯品会API申请指南

唯品会是中国最大的会员制特卖电商平台之一&#xff0c;于2008年创立&#xff0c;唯品会主营业务为互联网在线销售品牌折扣商品&#xff0c;涵盖名品服饰鞋包、美妆、母婴、居家等各大品类2。唯品会采取供应链直采模式&#xff0c;与全球3000多家品牌及供应商合作&#xff0c;直…

网络货运平台服务模式,你真的了解吗?

在当今的“互联网”时代&#xff0c;网络货运平台已经成为物流行业中的重要力量。 长期以来&#xff0c;货物运输行业处于“小、散、乱、差”的状态&#xff0c;存在信息不对称、运输环节层层分包等问题。数字时代到来&#xff0c;各行各业都在进行数字升级&#xff0c;物流行…

德国金融监管机构网站遭遇大规模DDoS攻击后“瘫痪”

德国波恩的BaFin大楼 BaFin是负责监督和监管德国金融机构和市场的金融监管机构&#xff0c;其职责是确保德国金融体系的稳定性、完整性和透明度。 此外&#xff0c;BaFin 的网站还为企业和消费者提供银行、贷款和财产融资等方面的信息。它还提供消费者帮助热线和举报人信息共…

分享一些领英添加客户的话术

昨天一个朋友很开心地跟我分享她在领英找到的一个非常优质的客户&#xff0c;她说这个客户很忠诚&#xff0c;基本上每年都会回来找她下单&#xff0c;这两年持续的下单&#xff0c;也没有对比价格&#xff0c;特别感恩遇见这样的客户。 也许是行业和产品不同&#xff0c;我领…

[C++]杨辉三角

目录 题目 解题思路 代码实现 获取数字 打印函数 主函数 全部代码 运行结果 题目 给定一个非负整数numRows &#xff0c;生成「杨辉三角」的前numRows行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 解题思路 第k列的第i个数字的值第k-1列的(…

合宙Air724UG LuatOS-Air LVGL API控件-加载器(Spinner)

加载器(Spinner) 示例代码 spinner lvgl.spinner_create(lvgl.scr_act(), nil) lvgl.obj_set_size(spinner, 100, 100) lvgl.obj_align(spinner, nil, lvgl.ALIGN_CENTER, 0, 0) 创建 通过 lvgl.spinner_create 就可创建一个加载器&#xff0c;本身自带动画效果。 spinner …

PageHelper分页原理解析

大家好&#xff0c;我是Leo! 今天给大家带来的是关于PageHelper原理的解析&#xff0c;最近遇到一个SQL优化的问题&#xff0c;顺便研究了一下PageHelper的原理&#xff0c;毕竟也是比较常用&#xff0c;源码也比较好看的懂&#xff0c;如果感兴趣的小伙伴可以跟着过程去DEBUG源…

【优选算法】—— 前缀和算法

前言&#xff1a; 本期&#xff0c;我将要带大家学习的是有关前缀和算法的学习&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;什么是前缀和算法 &#xff08;二&#xff09;题目讲解 1、【模板】前缀和 2、【模板】二维前缀和 3、 和可被K整除的…