在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

NET CORE将对象属性按照指定顺序输出

DotNet 清风 32℃ 0评论

背景

因业务需求,需要与第三方进行融合登录。第三方融合登录接口有关于验签的要求,将解密的数据按照规定的顺序进行MD5进行签名验证并与提供的MD5签名作为对比。其加密的明文是Json字符串,解密后还原后要按照URl参数的形式进行排列进行MD5签名。

规定

加密参数(注:加密参数名称均为小写字母,没有使用驼峰法命名)

名称类型默认值简介
sourceidString必传来源标识
targetidString必传目标标识
usercodeString必传用户唯一标识
usernameString用户姓名
idcardString身份证号码
phoneString手机号码
ounameString部门名称
timeString必传当前时间戳,精确到毫秒

签名数据采用以上面表格顺序以及以下格式进行字段拼接

sourceid=skyfinder&targetid=sky&usercode=100001&username=清风&idcard=110101199003074194&phone=16620927111&ouname=博客&time=1599539358

实现

创建一个自定义特性SortOrderAttribute,用来标识实体属性顺序与名称。


public class SortOrderAttribute: Attribute
 {
        public string Name { get; set; }

        public int Index { get; set; }

        public SortOrderAttribute(string name,int index)
        {
            Name = name;
            Index = index;
        }
    }

根据表格内容创建实体模型指定其排列顺序并通过方法GetUrIParameterString实现顺序输出内容。


public class PoliceStudiesUser
{
        /// <summary>
        /// 来源标识
        /// </summary>
        [SortOrder("来源标识",1)]
        public string sourceid { get; set; }
        /// <summary>
        /// 目标标识
        /// </summary>
        [SortOrder("来源标识", 2)]
        public string targetid { get; set; }
        /// <summary>
        /// 用户唯一标识
        /// </summary>
        [SortOrder("来源标识", 3)]
        public string usercode { get; set; }
        /// <summary>
        /// 用户姓名
        /// </summary>
        [SortOrder("来源标识", 4)]
        public string username { get; set; }
        /// <summary>
        /// 身份证号码
        /// </summary>
        [SortOrder("来源标识", 5)]
        public string idcard { get; set; }
        /// <summary>
        /// 手机号码
        /// </summary>
        [SortOrder("来源标识", 6)]
        public string phone { get; set; }
        /// <summary>
        /// 部门名称
        /// </summary>
        [SortOrder("来源标识", 7)]
        public string ouname { get; set; }

        /// <summary>
        /// 当前时间戳,精确到毫秒
        /// </summary>
        [SortOrder("来源标识", 8)]
        public string time { get; set; }

        public string GetUrIParameterString()
        {
            List<string> urlParameter = new List<string>();
            //foreach (PropertyInfo item in this.GetType().GetProperties().OrderBy(p => (p.GetCustomAttributes(true)[0] as SortOrderAttribute).Index).ToArray())
            Type type = this.GetType();
            var properties = type.GetProperties().OrderBy(p => (p.GetCustomAttributes(true)[0] as SortOrderAttribute).Index).ToArray();
            foreach (var item in properties)
            {
                string value = item.GetValue(this, null) == null ? "" : item.GetValue(this, null).ToString().Trim();
                if (string.IsNullOrWhiteSpace(value))
                {
                    continue;
                }
                urlParameter.Add($"{item.Name}={value}");
            }
            return string.Join("&",urlParameter);
        }
    }

调用测试

       

 static void Main(string[] args)
 {
            PoliceStudiesUser studiesUser = new PoliceStudiesUser() {
                sourceid="skyfinder",
                targetid="sky",
                idcard= "110101199003074194",
                usercode="100001",
                username="清风",
                ouname="博客",
                phone= "16620927111",
                time= "1599539358"
            };
            Console.WriteLine(studiesUser.GetUrIParameterString());
            Console.Read();
 }

示例下载

NET CORE指定顺序输出对象属性内容

转载请注明:清风博客 » NET CORE将对象属性按照指定顺序输出

喜欢 (0)or分享 (0)
支付宝扫码打赏 微信打赏
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址