首页 问答 .NET 中 MessagePack 序列化对象到 IBufferWriter<byte> 的问题
问题详情

调用 MessagePackSerializer 的序列化代码如下:

public class HybridCacheMessagePackSerializer<T>
    (MessagePackSerializerOptions? options) : IHybridCacheSerializer<T>
{
    public T Deserialize(ReadOnlySequence<byte> source)
    {
        return MessagePackSerializer.Deserialize<T>(source, options);
    }
    public void Serialize(T value, IBufferWriter<byte> target)
    {
        MessagePackSerializer.Serialize(target, value, options);
    }
}

使用的 MessagePackSerializerOptions:

public static MessagePackSerializerOptions CreateDefaultOptions()
{
    var resolver = CompositeResolver.Create(
        NativeDateTimeResolver.Instance,
        NativeGuidResolver.Instance,
        NativeDecimalResolver.Instance,
        ContractlessStandardResolver.Instance);
    return MessagePackSerializerOptions.Standard.WithResolver(resolver);
}

序列化时报错:

MessagePackSerializationException: Failed to serialize System.Collections.Generic.List`1[[Cnblogs.Cache.Hybrid.Extensions.Tests+BlogPost, HybridCache.MessagePack.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] value.
---> MessagePack.FormatterNotRegisteredException: Cnblogs.Cache.Hybrid.Extensions.Tests+BlogPost is not registered in resolver: MessagePack.Resolvers.StandardResolver

请问如何解决这个问题?

回答

问题补充:

ArrayBufferWriter<byte> 测试是正常的

var blogPosts = await GetBlogPostsAsync();
var options = MessagePackSerializerFactory.CreateDefaultOptions();
var writer = new ArrayBufferWriter<byte>();
MessagePackSerializer.Serialize(writer, blogPosts, options);

版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.stntk.com/question/2709.html

发表评论
暂无评论

还没有评论呢,快来抢沙发~

点击联系客服

在线时间:8:00-16:00

客服QQ

70068002

客服电话

400-888-8888

客服邮箱

70068002@qq.com

扫描二维码

关注微信公众号

扫描二维码

手机访问本站