首页 新闻 会员 周边

.NET 中 MessagePack 序列化对象到 IBufferWriter<byte> 的问题

0
悬赏园豆:30 [已解决问题] 解决于 2026-03-28 19:45

调用 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);
dudu的主页 dudu | 高人七级 | 园豆:23095
提问于:2026-03-28 16:37
< >
分享
最佳答案
0

是因为代码中的错误造成 CreateDefaultOptions() 的值没有传给 HybridCacheMessagePackSerializerContractlessStandardResolver.Instance 没生效

dudu | 高人七级 |园豆:23095 | 2026-03-28 19:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册