FreeRedis icon indicating copy to clipboard operation
FreeRedis copied to clipboard

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

Open wapco opened this issue 2 years ago • 2 comments

使用这两个序列化器需要分别在目标类上加上注解[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<T>(string val) => MessagePackSerializer.Deserialize<T>(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 avatar Apr 03 '23 02:04 wapco

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

wapco avatar Apr 03 '23 02:04 wapco

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

alvinhao666 avatar Apr 25 '23 01:04 alvinhao666