实体类中有个字段为JSON类型(列表),该JSON类型中有一个字段为枚举,该枚举无法使用枚举字符串进行存储 返回

实体类中有个字段为JSON类型(列表),该JSON类型中有一个字段为枚举,该枚举无法使用枚举字符串进行存储,
/// <summary>
/// 消息通知列表
/// </summary>
[SugarColumn(IsJson = true, ColumnDataType = "longtext")]
public List<SysNotifyDto> NotifyList { get; set; }
public class SysNotifyDto
{
/// <summary>
/// 通知分组名称
/// </summary>
[SugarColumn(ColumnDataType = "varchar(20)", SqlParameterDbType = typeof(EnumToStringConvert))]
public EnumSysNotifyGroup NotifyGroup { get; set; }
public string NotifyGroupStr
{
get
{
return NotifyGroup.ToDescription();
}
}
}
添加特性无效,数据库存储的格式仍然为int
NotifyList 字段值为:[{"NotifyGroup":-2,"NotifyGroupStr":"项目服务计划提醒"}]
这个有没有办法解决
热忱回答(4)
-
fate sta VIP0
2周前这个一般是序列化的功能,你可以改写你序列化的实现
0 回复 -
fate sta VIP0
2周前F12查看源码 EnumToStringConvert 重写个序列化类
MyEnumToStringConvert
typeof(MyEnumToStringConvert )
0 回复 -
梦想家 VIP0
1周前不是EnumToStringConvert序列化的问题,是采用[SugarColumn(IsJson = true, ColumnDataType = "longtext")]
后,没有触发EnumToStringConvert这个转换枚举,断点直接没进去0 回复 -
梦想家 VIP0
1周前已解决,在JSON字段上加上自定义方法typeof(JsonEnumToStringConvert),手动进行StringEnumConverter枚举转换的序列化就可以了
/// <summary>
/// 国家
/// </summary>
[SugarColumn(IsJson = true, ColumnDataType = "longtext", SqlParameterDbType = typeof(JsonEnumToStringConvert))]
public List<DisplayLangDto> Country_LangList { get; set; }
public class JsonEnumToStringConvert : ISugarDataConverter
{
public SugarParameter ParameterConverter<T>(object columnValue, int columnIndex)
{
string name = "@MyEnum" + columnIndex;
if (columnValue == null)
{
return new SugarParameter(name, null);
}
var list = JsonConvert.DeserializeObject<T>(columnValue.ToString());
var str = JsonConvert.SerializeObject(list, new StringEnumConverter());
return new SugarParameter(name, str);
}
public T QueryConverter<T>(IDataRecord dr, int i)
{
string @string = dr.GetString(i);
return JsonConvert.DeserializeObject<T>(@string);
}
}
0 回复