编解码

优质
小牛编辑
141浏览
2023-12-01

Uragano默认采用MessagePack编解码,你也可以通过实现ICodec接口自定义编解码

自定义编解码

public class MessagePackCodec : ICodec
    {
        public MessagePackCodec()
        {
            CompositeResolver.RegisterAndSetAsDefault(NativeDateTimeResolver.Instance, ContractlessStandardResolverAllowPrivate.Instance);
            MessagePackSerializer.SetDefaultResolver(ContractlessStandardResolverAllowPrivate.Instance);
        }

        public byte[] Serialize<TData>(TData data)
        {
            return MessagePackSerializer.Typeless.Serialize(data);
        }

        public object Deserialize(byte[] data, Type type)
        {
            return data == null ? null : MessagePackSerializer.Typeless.Deserialize(data);
        }

        public T Deserialize<T>(byte[] data)
        {
            return data == null ? default : (T)MessagePackSerializer.Typeless.Deserialize(data);
        }

        public string ToJson<TData>(TData data)
        {
            return data == null ? default : MessagePackSerializer.ToJson(data);
        }
    }

注入自定义编解码

service.AddUragano(context.Configuration, builder =>
                    {
                        builder.AddServer();
                        builder.AddConsul();
                        builder.AddCodec<MessagePackCodec>();
                    });