You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IRedisDatabase.ListAddToLeft存储实体出现序列化乱码如何解决

Redis存储实体乱码修复方案

问题根因

你当前使用的Redis封装方法默认使用二进制序列化机制处理传入的泛型对象,序列化后的字节数组头部会包含类型元数据、二进制标识等非文本内容,因此存入Redis后会出现乱码,仅后半段可见部分JSON结构,不符合你预期的纯JSON存储要求。

修复方案

你可以根据自己的需求选择以下任意一种方案:

  • 方案1:仅修改当前业务代码,手动序列化对象
    在调用Redis存储方法前,先把mailQueue实体序列化为JSON字符串再传入即可,无需修改底层封装代码。示例如下(两种常用序列化库二选一):

    // 业务逻辑代码
    ...
    _dbContext.MailQueue.Add(mailQueue);
    _dbContext.SaveChanges();
    
    // 用System.Text.Json序列化
    string mailQueueJson = System.Text.Json.JsonSerializer.Serialize(mailQueue);
    // 或用Newtonsoft.Json序列化
    // string mailQueueJson = Newtonsoft.Json.JsonConvert.SerializeObject(mailQueue);
    
    var response = _redisCoreManager.ListAddToLeft(RedisConstants.MAILQUEUE, mailQueueJson);
    
  • 方案2:修改Redis封装方法,统一JSON序列化逻辑
    如果你希望所有调用ListAddToLeft的对象都自动存为JSON格式,可以直接修改底层封装方法,内置序列化逻辑,避免每次业务调用都手动处理:

    public long ListAddToLeft<T>(string key, T value) where T : class
    {
        var redisValue = default(long);
        try
        {
            // 新增序列化逻辑
            string jsonValue = System.Text.Json.JsonSerializer.Serialize(value);
            redisValue = redis.ListAddToLeft(this.configParamterKey + key, jsonValue);
        }
        catch (Exception ex)
        {
            logCoreMan.Error("Redis ListAddToLeft Exception", ex);
        }
    
        return redisValue;
    }
    

    注意:用这个方案后续从Redis取值时,需要统一对取出的字符串做JSON反序列化,才能转回对应实体对象。

  • 方案3:全局配置Redis序列化规则
    如果你用的Redis客户端支持全局序列化配置,可以直接在服务初始化时将默认序列化器设置为JSON序列化器,不需要修改任何现有业务代码和封装方法,所有存入Redis的对象都会自动转换为JSON格式。

内容的提问来源于stack exchange,提问作者AliRıza Adıyahşi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:18:02