57 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|