Typeless serializer fails to serialize simple type, unless fields are prefixed with "_" · Issue #1776 · MessagePack-CSharp/MessagePack-CSharp · GitHub
Skip to content

Typeless serializer fails to serialize simple type, unless fields are prefixed with "_" #1776

Description

@epitka

Bug description

Typeless serializer fails to serialize simple type, unless fields are prefixed with "_"

Repro steps

public class TempTests
{
    private static Fixture Fixture = new Fixture();

    [Fact]
    public void Should_Serialize()
    {
        var expected = Fixture.Create<TestInfo>();

        var binary = MessagePackSerializer.Typeless.Serialize(expected);

        // var current = MessagePackSerializer.Typeless.Deserialize(binary);

        // current.ShouldDeepEqual(expected);
    }
    public struct TestInfo
    {
        // if fields are prefixed with "_" then it works fine
        private Guid typeId;
        private Guid levelId;

        public TestInfo(
            Guid typeId,
            Guid levelId)
        {
            this.typeId = typeId;
            this.levelId = levelId;
        }

        public Guid TypeId
        {
            get => this.typeId;
            set
            {
                this.typeId = value;
            }
        }

        public Guid LevelId
        {
            get => this.levelId;
            set
            {
                this.levelId = value;
            }
        }
    }

Expected behavior

Should be able to serialize simple types without requiring that fields are prefixed with "_"

Actual behavior

Serialization fails with message

MessagePack.MessagePackSerializationException
Failed to serialize System.Object value.
   at MessagePack.MessagePackSerializer.Serialize[T](MessagePackWriter& writer, T value, MessagePackSerializerOptions options)
   at MessagePack.MessagePackSerializer.Serialize[T](T value, MessagePackSerializerOptions options, CancellationToken cancellationToken)
   at MessagePack.MessagePackSerializer.Typeless.Serialize(Object obj, MessagePackSerializerOptions options, CancellationToken cancellationToken)
   at SeatGeek.Open.SmartCaching.Tests.Serializers.MsgPackSerializerTests.TempTests.Should_Serialize() in /Users/edvardpitka/code/src/gitlab.service.seatgeek.mgmt/consumer/peakpass/SeatGeek.Open.SmartCaching.Tests/Serializers/MsgPackSerializerTests/TempTests.cs:line 21

System.TypeInitializationException
The type initializer for 'FormatterCache`1' threw an exception.
   at MessagePack.Resolvers.DynamicContractlessObjectResolverAllowPrivate.GetFormatter[T]()
   at MessagePack.Resolvers.TypelessContractlessStandardResolver.ResolverCache.GetFormatterCore[T]()
   at MessagePack.Resolvers.CachingFormatterResolver.GetFormatter[T]()
   at MessagePack.Resolvers.TypelessContractlessStandardResolver.GetFormatter[T]()
   at MessagePack.FormatterResolverExtensions.GetFormatterDynamic(IFormatterResolver resolver, Type type)
   at MessagePack.FormatterResolverExtensions.GetFormatterDynamicWithVerify(IFormatterResolver resolver, Type type)
   at MessagePack.Formatters.TypelessFormatter.Serialize(MessagePackWriter& writer, Object value, MessagePackSerializerOptions options)
   at MessagePack.MessagePackSerializer.Serialize[T](MessagePackWriter& writer, T value, MessagePackSerializerOptions options)
  • Version used: MessagePack 2.5.108
  • Runtime: .NET Core 6

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions