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; } } }