今天遇到了一个很恶心的事,数据库列名都是带下划线“_”的,使用公司类库的方法取值取出来的字段都是带下划线的json,但是c#属性命名规范这么起名很糟心,于是去网上查找发现c#自带将json列名映射到属性的特性。
方法很简单,只需要将实体模型的属性上方增加一个特性JsonProperty
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public class PlanModel { [Column("plan_id")] [JsonProperty("plan_id")] public string PlanId { get; set; } [Column("plan_name")] [JsonProperty("plan_name")] public string PlanName { get; set; }
}
|
假如你的json长这样
1 2 3 4
| { "plan_id": "123456", "plan_name": "示例方案名称" }
|
将你的json赋值给变量str 使用起来就是这样:
1
| var strModel = JsonConvert.DeserializeObject<PlanModel>(str)
|
然后问题又来了 我逻辑运行完的数据是赋值给了PlanId和PlanName 我想进行数据库插入怎么办呢?
只要这么写就好了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public static string GetMappingDemo<T>(T model, string attributeName) { try { var attributeMappingName = model.GetType()?.GetProperty(attributeName)?.CustomAttributes?.FirstOrDefault(c => c.AttributeType.Name == "ColumnAttribute")?.ConstructorArguments?.FirstOrDefault().Value?.ToString(); return string.IsNullOrEmpty(attributeMappingName) ? attributeName : attributeMappingName; } catch (Exception) {
return attributeName; } }
|
调用方法
1
| GetMappingDemo(new PlanModel(), "PlanId");
|
这样就把映射的列名取出来了,然后怎么玩就看你们的了,我们是定义了一种类似于Dictionary的类型,然后直接重命名key就ok了