我想知道在反序列化时是否有任何选项可以对传入 DTO 中的字符串值进行“修剪”和“如果为空则设置为空”?我有很多字符串属性需要执行此操作,因此在过滤器中手动为每个属性执行此操作似乎太乏味了......
问问题
375 次
1 回答
5
您可以在全局请求过滤器中使用反射,例如:
GlobalRequestFilters.Add((req, res, dto) => dto.SanitizeStrings());
哪里SanitizeStrings
只是一个自定义扩展方法:
public static class ValidationUtils
{
public static void SanitizeStrings<T>(this T dto)
{
var pis = dto.GetType().GetProperties();
foreach (var pi in pis)
{
if (pi.PropertyType != typeof(string)) continue;
var mi = pi.GetGetMethod();
var strValue = (string)mi.Invoke(dto, new object[0]);
if (strValue == null) continue;
var trimValue = strValue.Trim();
if (strValue.Length > 0 && strValue == trimValue) continue;
strValue = trimValue.Length == 0 ? null : trimValue;
pi.GetSetMethod().Invoke(dto, new object[] { strValue });
}
}
}
于 2014-11-08T17:54:07.883 回答