我正在使用.NET Core 3.1(将Dapper与Oracle作为数据库)编写REST API。现在,所有dapper扩展方法(例如QuerySingleOrDefaultAsync,QueryAsync)始终映射为大写。例如
var result = await conn.QuerySingleOrDefaultAsync<EmployeeModel>(query, commandType: CommandType.Text);
始终映射到
public class EmployeeModel
{
public string FIRST_NAME;
}
然后与CamelCasePropertyNamesContractResolver()一起使用时的json输出如下所示
{"firsT_NAME":"Test name"}
我想要它如下
{"firstName":"Test name"}
所以,我想到了如下使用MyContractResolver
public class MyContractResolver: DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization serialization)
{
var property = base.CreateProperty(member, serialization);
property.PropertyName = property.PropertyName.CamelCase();
return property;
}
}
CamelCase是字符串扩展方法
public static string CamelCase(this string str)
{
TextInfo cultInfo = new CultureInfo("en-US", false).TextInfo;
str = str.ToLower().Replace("_", " ");
str = cultInfo.ToTitleCase(str);
str = Char.ToLowerInvariant(str[0]) + str.Substring(1);
str = str.Replace(" ", "");
return str;
}
这给了我我想要的东西,但这是正确的方法吗?这种方法有什么问题?我看着FluentMap,但对我来说似乎很详尽。