首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让OpenApi生成器正确地转换Dictionary<int,string>?

如何让OpenApi生成器正确地转换Dictionary<int,string>?
EN

Stack Overflow用户
提问于 2021-05-11 17:13:12
回答 1查看 1.5K关注 0票数 7

现在,我的Api返回一个包含Dictionary<int, string>属性的模型:

代码语言:javascript
运行
AI代码解释
复制
public Dictionary<int, string> Subdivisions { get; set; }

当我运行OpenApi生成器时,输出类具有

代码语言:javascript
运行
AI代码解释
复制
public Dictionary<string, string> Subdivisions { get; set; }

我知道JSON规范不允许整数键,但这确实使期望的API的使用者感到困惑。

如何确保我的输出类有Dictionary<int, string>而不是Dictionary<string, string>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-14 07:52:30

由于Swagger/OpenAPI定义是特定于REST的,它们很可能继续支持可以用JSON表示的模型。JSON是一种与语言无关的序列化格式,支持对象和集合,但它没有方法或实际实现。REST提供了改变服务器JSON副本的方法,然后要求使用者根据需要解释响应。由于JSON中没有Map,所以IDictionary的默认做法是将其序列化为一个对象,使用它的键作为属性名--好处是类似于映射的查找函数,但是代价是属性名称必须是字符串。

那么,在有效的JSON中,Dictionary<int,string>会是什么样的呢?使用自定义序列化程序和反序列化程序,我们可以期望得到键值对对象的列表:

代码语言:javascript
运行
AI代码解释
复制
[
    {"key":1, "value": "one"},
    {"key":2, "value": "two"}
]

您将使用这个KVP模型发布REST操作,然后在您的API上放置一个自定义转换器,以将这个KVP列表转换成字典。这将符合美洲组织/JSON,并允许期望的API/service的非REST使用者。关于如何做到这一点,有几个例子:

C# JSON自定义序列化 https://www.newtonsoft.com/json/help/html/SerializingCollections.htm

但是,如果您确实需要从不符合标准的傲慢定义中生成代码,则可以重写生成器以满足您的需要。把它看作是一种警告,即您的实现是反粒度的,您在这个代码元中所做的所有努力都可能被小版本所取消。最好是找到一条道路,朝着社区的方向前进,让您的解决方案具有最长的可行性。

话虽如此,生成器是一个简单的Java程序,它可以读取规范,并使用穆斯塔赫模板输出文本文件。"CodeGen“类将规范解析为遵循特定于语言的逻辑的数组,然后将”穆斯塔赫“模板应用于逻辑,而不是应用于数组之上以生成代码。通过阅读Java作为指南,我通常能够通过只修改胡子模板或配置来生成我的自定义类。不幸的是,对于您的情况,用于操作的returnType只支持列表或原语,因此,如果您希望生成一个API来返回字典,则需要修改CodeGen Java。如果你往上游走,一定要带一只桨!

这里是为地图设置IDictonary类型的地方。这里是通用设置它的地方,这里是C#的集合。这是创建模型属性的胡子,这是API 操作的创建方式。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67496140

复制
相关文章
java如何将String转换为Int
Short.valueOf/parseShort, Long.valueOf/parseLong等也是有类似差别。
硬核编程
2020/07/23
1.7K0
C++ int string 转换
2009-09-18 15:37 1.   int sprintf( char *buffer, const char *format [, argument] ... );      <stdio.h> 例如: Cpp代码 int ss;   char temp[64];   string str;   ss = 1000;   sprintf(temp, "%d", ss);   string s(temp);   //调用string的方法   cout<<s.c_str()<<endl;//10
用户1258909
2018/07/03
1K0
int string相互转换
一、itoa()和atoi() 注意:这两个函数并不是标准的C函数,而是windows环境下特有的函数。 1、itoa #include<iostream> #include<string> using namespace std; int main() { int num=12345; string str; char s[30]; itoa(num,s,10); str=str+s; cout<<str; return 0; } 这里要注意:使用i
用户1215536
2018/02/05
1.1K0
java中string转换为int(int char)
// String change int public static void main(String[] args) { String str = “123”; int n; // first method // n = Integer.parseInt(str); n = 0; n = Integer.parseInt(str); System.out.println(“Integer.parseInt(str):”+ n); System.out.println(“\n”); //second method //n = Integer.valueOf(str).intValue();
全栈程序员站长
2022/07/28
1.9K0
java中string转换为int(int char)
golang string、int、int64 float 互相转换
#string到int int,err := strconv.Atoi(string) #string到int64 int64, err := strconv.ParseInt(string, 10, 64) //第二个参数为基数(2~36), //第三个参数位大小表示期望转换的结果类型,其值可以为0, 8, 16, 32和64, //分别对应 int, int8, int16, int32和int64 #int到string string := strconv.Itoa(int)
qubianzhong
2018/08/02
2.2K0
java string类型转换成int类型(string怎么强转int)
需要明确的是String是引用类型,int是基本类型,所以两者的转换并不是基本类型间的转换,这也是该问题提出的意义所在,SUN公司提供了相应的类库供编程人员直接使用。
全栈程序员站长
2022/07/30
1.9K0
enum和int、string的转换操作
enum Countries { 中国 = 5, 美国, 俄罗斯, 英国, 法国 }
全栈程序员站长
2022/07/15
4240
数制转换itoa atoi int转字符串 字符串转int string转int int转string
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 1.itoa():将整型值转换为字符串。 用法itoa(int,char*,int) 即(要转化的整形数,目标字符数组,进制) 2. ltoa():将长整型值转换为字符串。 用法ltoa(long,char*,int) 即(要转化的长整形数,目标字符数组,进制) ● gcvt():将浮点型数转换为字符串,取四舍五入。 用法gcvt(double,int,char*) 即(要转化的双精度浮点数,保留位数,目标字符串) ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 用法charecvt(double,int,int,int*) charecvt(双精度浮点数,保留位数,小数点位置,转换浮点数的符号) 这个函数存储最多ndigit个数字值作为一个字符串,并添加一个空数字符(’\0’),如果双精度浮点数中的数字个数超过保留位数,低位数字被舍入。如果少于保留位数个数字,该字符串用0填充浮点数符号0为正其余为负数。 ● fcvt():指定位数为转换精度,其余同ecvt()。 用法charfcvt(double,int,int*,int*) charfcvt(双精度浮点数,保留小数点后位数,小数点位置,转换浮点数的符号) 2. C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。 ● atof():将字符串转换为双精度浮点型值。 double atof=char(const char) ● atoi():将字符串转换为整型值。用法同上。 ● atol():将字符串转换为长整型值。用法同上。 ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。double strtod(char * str,char * str) double strtod(转换的来源字符串首地址,不能转换数字的首地址) ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。 strtol(char * str,char * str,int) double strtol(转换的来源字符串首地址,不能转换数字的首地址,基于进制) ● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。用法同上。
风骨散人Chiam
2020/10/28
4.1K0
将float转换成string_go string转int
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说将float转换成string_go string转int,希望能够帮助大家进步!!!
Java架构师必看
2022/10/24
1.5K0
C++的string转换成int
在C++标准库里面,使用stringstream:(stringstream 可以用于各种数据类型之间的转换)
全栈程序员站长
2022/11/15
7860
java把string转int类型_java把String类型转换为int类型的方法
这篇文章将为大家详细讲解有关java把String类型转换为int类型的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
全栈程序员站长
2022/11/10
4.4K0
java把string转int类型_java把String类型转换为int类型的方法
MFC中数据格式转化:CString转换String、String转换CString、int转换CString……「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115095.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
1.7K0
scala String to Int
object StringUtils { /** * 判断字符串是否是纯数字组成的串,如果是,就返回对应的数值,否则返回0 * @param str * @return */ def strToInt(str: String): Int = { val regex = """([0-9]+)""".r val res = str match{ case regex(num) => num case _ => "0"
大数据工程师-公子
2019/03/14
1.6K0
java string转换为integer(Java int最大值)
大家好,又见面了,我是你们的朋友全栈君。String转换为int型 //convert str(String) to i(int) String str; int i = Integer.parseInt(str);
全栈程序员站长
2022/07/28
9260
将String转换成Int数组-Java「建议收藏」
今天贴出来一个编程小技巧,利用substring或charAt将字符转换为int数组。
全栈程序员站长
2022/07/28
1.1K0
Android开发---把int转换为String出现的问题
那这两种方法到底有什么区别呢,你还别说,我代码中就真出现了问题,一直不知道哪里出错了,调了好久才发现竟然是这个错误,
wust小吴
2019/07/08
7110
JAVA将string转化为int(int怎么转string)
1). int i = Integer.parseInt([String]); 或
全栈程序员站长
2022/07/28
3K0
知识分享之Golang——常用的类型转换int、string、float互相转换
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。
cn華少
2022/01/07
7030
java之学习int和String的相互转换
运行结果 String和int类型的相互转换 A:int — String A:int — String * a:和””进行拼接 * b:public static String valueOf(int i) * c:int — Integer — String(Integer类的toString方法()) * d:public static String toString(int i)(Integer类的静态方法) * B:String — int * a:String — Integer — int
吾爱乐享
2018/07/13
5220
[Golang系列] go中(int,int64,uint,string,float,bool,interface)类型相互转换
int→string string := strconv.Itoa(int) int→int64 int64_ := int64(int) int64→string string := strconv.FormatInt(int64,10) int→float float := float32(int) float := float64(int) int→uint64 uint64 := uint64(int) float→string string := strconv.FormatFloat(float64,'E',-1,64) string := strconv.FormatFloat(float32,'E',-1,32) 参数解释:表示格式:‘f’(ddd.dddd)、‘b’(-ddddp±ddd,指数是二进制)、’e’(-d.dddde±dd,指数是十进制)、’E’(-d.ddddE±dd,指数是十进制)、’g’(指数大时,用’e’格式,否则’f’格式)、’G’(指数大时,用’E’格式,否则’f’格式)
唯一Chat
2021/11/03
1.9K0

相似问题

将Dictionary<string、int>转换为Dictionary<int、List<string>>

30

将IEnumerable<Dictionary<int、string>>转换为List<Dictionary<int、string>>

21

将Dictionary<int、bool>转换为Dictionary<string、string>

14

如何将Dictionary<string、Task<int>>转换为Task<Dictionary<string、int>>

115

转换Dictionary<String,Int>到Dictionary<String,SomeEnum>使用LINQ?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档