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

SqlSugar 沟通中
4 172

实体类中有个字段为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

  • 这个一般是序列化的功能,你可以改写你序列化的实现

    0 回复
  • F12查看源码 EnumToStringConvert 重写个序列化类

    MyEnumToStringConvert 

     typeof(MyEnumToStringConvert )


    0 回复
  • 不是EnumToStringConvert序列化的问题,是采用[SugarColumn(IsJson = true, ColumnDataType = "longtext")]
    后,没有触发EnumToStringConvert这个转换枚举,断点直接没进去

    0 回复
  • 已解决,在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 回复