.NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序)

本文主要是介绍.NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

将对应集合中的参数按照ASCII码按照从小到大排序,并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA,其实对于有些参数比较少的而已我们完全可以自己使用固定拼接的方式拼接好来,但是假如参数集合中的参数多达十几个呢?你还是愿意用死方法一个一个的拼接吗?当然我是不愿意的,下面是我在网上的找的一个关于参数ASCII按从小到大排序的例子并结合自己的需求而总结的一个比较好的方法,已经在项目中使用了。

代码实现


/// <summary>
/// 将参数模型转为按照ASCII码从小到大排序的并且通过键值对的格式拼接而成的字符串如:(stringA="appId=xxxxxx&body=test&merchantId=xxxxx&random=xxxx&key=xxxx")
/// </summary>
/// <param name="rqData">实例的支付参数模型</param>
/// <returns></returns>
public string GetParameterAsciiAsc(paymentModel rqData)
{
//rqData为自己实例化的支付参数模型
Dictionary<string, string> stringSignTemp = new Dictionary<string, string>();
stringSignTemp.Add("appId",rqData.appId.ToString());
stringSignTemp.Add("body",rqData.body);
stringSignTemp.Add("channel",rqData.channel);
stringSignTemp.Add("merchantId",rqData.merchantId.ToString());
stringSignTemp.Add("notifyUrl", rqData.notifyUrl);
stringSignTemp.Add("outTradeNo", rqData.outTradeNo);
stringSignTemp.Add("openId", rqData.openId);
stringSignTemp.Add("random",random);
stringSignTemp.Add("subject", rqData.subject);
stringSignTemp.Add("totalFee",(rqData.totalFee).ToString());//单位为分
stringSignTemp.Add("tradeType", rqData.tradeType);var stringSign=JoinToStrForm(stringSignTemp);return stringSign;
}/// <summary>
/// 将字典集合转化为String类型字符串,并按照参数名ASCII码从小到大排序(字典序)
/// </summary>
/// <param name="dataPara">字典集合数据</param>
/// <returns></returns>
public string JoinToStrForm(Dictionary<string, string> dataPara)
{
var parameterAsc= dataPara.OrderBy(x => x.Key, new ComparerString()).ToDictionary(x => x.Key, y => y.Value);//参数按照参数名ASCII码从小到大排序(字典序)
List<string> list = new List<string>();
foreach (var item in parameterAsc)
{
//通过key,value拼接key=value
list.Add(item.Key + "=" + item.Value.Replace("#", "").Replace("?", "").Replace("&", "").Replace("=", ""));
}return string.Join("&", list);
}/// <summary>
/// 对象字符串比较
/// </summary>
private class ComparerString : IComparer<String>
{public int Compare(String x, String y){//将此实例与指定的 <see cref="T:System.String" /> 对象进行比较,并指示此实例在排序顺序中是位于指定的字符串之前、之后还是与其出现在同一位置。return string.CompareOrdinal(x, y);}
}

​​

这篇关于.NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869532

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间