using Newtonsoft.Json;
using System.Reflection;
using Newtonsoft.Json.Serialization;
using System.Text.RegularExpressions;
using System.Text;
namespace LearningOfficer.OA.Mobile.Api.Filters
{
public class CustomContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (!string.IsNullOrEmpty(member.Name))
{
if (member.Name.Length >= 1 && char.IsUpper(member.Name[0]))
{
property.PropertyName = char.ToLower(member.Name[0]) + member.Name.Substring(1);
}
property.PropertyName = ChangeName(property.PropertyName);
}
return property;
}
///
/// 将下划线命名转换为小驼峰命名
///
/// 变量名
///
private string ChangeName(string name)
{
Match mt = Regex.Match(name, @"_(\w*)*");
if (mt.Success) {
var sb = new StringBuilder();
bool toUpper = false;
for (int i = 0; i < name.Length; i++)
{
char c = name[i];
if (c == '_')
{
toUpper = true;
}
else
{
sb.Append(toUpper ? char.ToUpperInvariant(c) : c);
toUpper = false;
}
}
if (sb.Length > 0)
sb[0] = char.ToLowerInvariant(sb[0]);
return sb.ToString();
}
return name;
}
}
}