这是编写自定义合同解析器的正确方法吗?

时间:2020-09-24 18:47:17

标签: .net-core-3.1 restapi

我正在使用.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,但对我来说似乎很详尽。

0 个答案:

没有答案