2881099/FreeRedis

使用MessagePack或MemoryPack作为序列化器失败

wapco opened this issue · 2 comments

wapco commented

使用这两个序列化器需要分别在目标类上加上注解[MessagePackObject] [MemoryPackable],而freeredis的序列化把对象都转为object,object是无法加上这两个注解,导致序列化失败。

Exception: MessagePack.MessagePackSerializationException: Failed to serialize System.Object value.
Exception: MemoryPack.MemoryPackSerializationException: System.Object is not registered in this provider.

代码:
public class MessagePackRedisSerializer : IRedisSerializer
{
public T Deserialize(string val) => MessagePackSerializer.Deserialize(Encoding.UTF8.GetBytes(val));

    public object Deserialize(string val, Type type) => MessagePackSerializer.Deserialize(type, Encoding.UTF8.GetBytes(val));

    public byte[] Serialize<T>(T value) => MessagePackSerializer.Serialize(value);
}
wapco commented

为什么不直接用泛型作为序列化器呢?而是要转为object

MessagePack 我是这么玩的,目标类不需要注解
image