/// <summary>
/// TypeTrimHelper
/// </summary>
public static class TypeTrimHelper
{
/// <summary>
/// 类型字典
/// </summary>
public static ConcurrentDictionary<Type, PropertyInfo[]> TypeDictionary
= new ConcurrentDictionary<Type, PropertyInfo[]>(); /// <summary>
/// 获取Type属性
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static PropertyInfo[] GetTypeProperties(Type type)
{
PropertyInfo[] typeProperties = null;
if (TypeDictionary.ContainsKey(type))
{
typeProperties = TypeDictionary[type];
}
else
{
typeProperties = type.GetProperties();
TypeDictionary[type] = typeProperties;
} return typeProperties;
} private static bool HasNotAutoTrimSpacesAttribute(Type type)
{
return type.GetCustomAttribute<NotAutoTrimSpacesAttribute>()
!= null;
} private static bool HasNotAutoTrimSpacesAttribute(PropertyInfo propertyInfo)
{
return propertyInfo.GetCustomAttribute<NotAutoTrimSpacesAttribute>()
!= null;
} /// <summary>
/// 去空格操作
/// </summary>
/// <param name="objType">类型</param>
/// <param name="obj">当前对象</param>
public static void TypeTrim(Type objType, object obj)
{
if (HasNotAutoTrimSpacesAttribute(objType) || obj == null) { return; } PropertyInfo[] typeProperties = GetTypeProperties(objType);
foreach (var typeProperty in typeProperties)
{
if (HasNotAutoTrimSpacesAttribute(typeProperty)) { continue; } var cPropertyType = typeProperty.PropertyType;
if (cPropertyType == typeof (string))
{
if (!typeProperty.CanWrite)
{
continue;
} string value = typeProperty.GetValue(obj) as string;
if (value != null)
{
typeProperty.SetValue(obj, value.Trim());
}
}
else
{
if (cPropertyType.IsClass)
{
if (cPropertyType.IsValueType)
{
continue;
} if (cPropertyType.GetInterface(typeof (IEnumerable).Name, false) != null)
{
var values = typeProperty.GetValue(obj) as IEnumerable;
if (values != null)
{
var enumerator = values.GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Current != null)
{
var itemType = enumerator.Current.GetType();
TypeTrim(itemType, enumerator.Current);
}
}
}
}
else
{
TypeTrim(cPropertyType, typeProperty.GetValue(obj));
}
}
}
}
} }

Request参数值自动去空格的更多相关文章

  1. 日期,为下拉列表添加日期,优化,目前本人博客上最优的解决方案,之前学习的通过判断得到平年闰年,而这个是让系统自动去判断,无须if判断,代码示例

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  2. WordPress实现中英文数字之间自动加空格排版

    通常来说中文与英文.中文和数字之间加上空格的排版会更加好看,但是如果让我们在编辑文章的时候人工添加,感觉非常繁琐和让人厌烦,所以今天龙笑天下就来跟大家介绍一下WordPress如何实现中英文数字之间自 ...

  3. ORACLE对字符串去空格处理(trim)

    首先便是这Trim函数.Trim 函数具有删除任意指定字符的功能,而去除字符串首尾空格则是trim函数被使用频率最高的一种.语法Trim ( string ) ,参数string:string类型,指 ...

  4. 11月8日下午Jquery取属性值(复选框、下拉列表、单选按钮)、做全选按钮、JSON存储、去空格

    1.jquery取复选框的值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  5. jQuery取复选框值、下拉列表里面的属性值、取单选按钮的属性值、全选按钮、JSON存储、*去空格

    1.jquery取复选框的值<!--引入jquery包--> <script src="../jquery-1.11.2.min.js"></scri ...

  6. EditText中输入手机号码时,自动添加空格

    输入手机号码时,自动添加空格,更容易辨别 public class PhoneWatcher implements TextWatcher { private EditText _text; publ ...

  7. js使用正则表达式去空格

    写成类的方法格式如下:(str.trim();) <script language="javascript"> String.prototype.trim=functi ...

  8. PHP trim去空格函数

    trim() 能除去的字符有“ ”空格."\t"水平制表符."\n"换行符."\r"回车符."\0字符串结束符".&qu ...

  9. Jquery取属性值(复选框、下拉列表、单选按钮)、做全选按钮、JSON存储、去空格

    1.jquery取复选框的值 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

随机推荐

  1. css实现文本超出部分省略号显示

    一般超出文本显示分为两种:单行超出文本和多行超出文本省略号显示,实现方式使用纯css实现: div { // 单行 white-space: nowrap; overflow: hidden; tex ...

  2. python学习记录

    学习python中······· 今天写了个装饰器用来登录用,用户名和密码是存在文件里的,涉及到了装饰器和带参数的装饰器 文件里的内容如下 {"liming": 123456} { ...

  3. 在阿里云Ubuntu 14.04 Linux服务器上安装docker

    参考 How To Install and Use Docker: Getting Started 这篇最靠谱的文档在阿里云 Ubuntu  14.04 服务器上成功安装 docker . ---- ...

  4. setting设置

    1.调试 DEBUG = True 2.设置template TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTem ...

  5. cdnbest设置301跳转

     cdnbest设置301跳转  格式:^http://kangleweb.com/(.*)$   https://www.kangleweb.com/$1  下面是站点里所有域名都跳转到https ...

  6. DOM 节点node

    DOM可以将任何HTML或XML文档描绘成一个有多层节点构成的结构,即在HTML中所有内容都是节点.文档节点是每个文档的根节点,文档节点有一个子节点,称为文档元素.每个文档只能有一个文档元素.在HTM ...

  7. 初学c# -- c#创建开机自启服调用外部交互式exe文件

    在c#创建的开机自启动服务里,调用外部可执行文件有以下问题:1.带窗口的交互式的exe文件调用后,实际并没有被执行:2.服务是随windows启动的,服务启动后可能windows桌面还没出来,会报错误 ...

  8. TPL DataFlow初探(一)

    属性TPL Dataflow是微软面向高并发应用而推出的一个类库.借助于异步消息传递与管道,它可以提供比线程池更好的控制,也比手工线程方式具备更好的性能.我们常常可以消息传递,生产-消费模式或Acto ...

  9. Laravel5 (cli)命令行执行脚本及定时任务

    Artisan是Laravel自带的命令行接口名称,它提供了很多有用的命令想要查看所有可用的Artisan命令,可使用list命令查看: 1 php artisan list 每个命令都可以用help ...

  10. 【Python深入】Python中继承object和不继承object的区别

    python中定义class的时候,有object和没有object的不同?例如: class Solution(object): class Solution(): 这俩的区别在于—————— 在p ...