CSharp.Template/YuanXuan.IM.Api/Filters/CustomContractResolver.cs

57 lines
1.9 KiB
C#

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;
}
/// <summary>
/// 将下划线命名转换为小驼峰命名
/// </summary>
/// <param name="name">变量名</param>
/// <returns></returns>
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;
}
}
}