diff --git a/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs b/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs index 125d0069b..fa4d2422c 100644 --- a/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs +++ b/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Resolvers/DynamicObjectResolver.cs @@ -2019,19 +2019,6 @@ bool AddEmittableMemberOrIgnore(bool isIntKeyMode, EmittableMember member, bool if (len != 0) { - if (len != 1) - { - if (ctorEnumerator != null) - { - ctor = null; - break; - } - else - { - throw new MessagePackDynamicObjectResolverException("duplicate matched constructor parameter name:" + type.FullName + " parameterName:" + item.Name + " parameterType:" + item.ParameterType.Name); - } - } - paramMember = hasKey.First().Value; if (item.ParameterType.IsAssignableFrom(paramMember.Type) && paramMember.IsReadable) { diff --git a/tests/MessagePack.Tests/ContractlessStandardResolverConstructorTests.cs b/tests/MessagePack.Tests/ContractlessStandardResolverConstructorTests.cs index 9a755c966..d92819ecd 100644 --- a/tests/MessagePack.Tests/ContractlessStandardResolverConstructorTests.cs +++ b/tests/MessagePack.Tests/ContractlessStandardResolverConstructorTests.cs @@ -85,6 +85,43 @@ public TestConstructor2(int x, int y, int z) } } + public class TestConstructor3 + { + private Guid x; + private Guid y; + + public TestConstructor3(Guid x, Guid y) + { + this.x = x; + this.y = y; + this.CalledConstructorParameterCount = 2; + } + + public int CalledConstructorParameterCount { get; } + + public Guid X + { + get => this.x; + set => this.x = value; + } + + public Guid Y + { + get => this.y; + set => this.y = value; + } + } + + [Fact] + public void UseConstructor3() + { + var ctor = new TestConstructor3(Guid.NewGuid(), Guid.NewGuid()); + var bin = MessagePackSerializer.Serialize(ctor, ContractlessStandardResolverAllowPrivate.Options); + var r = MessagePackSerializer.Deserialize(bin, ContractlessStandardResolverAllowPrivate.Options)!; + + r.CalledConstructorParameterCount.Is(2); + } + [Fact] public void UseConstructor() { @@ -95,6 +132,16 @@ public void UseConstructor() r.CalledConstructorParameterCount.Is(3); } + [Fact] + public void UseConstructor2() + { + var ctor = new TestConstructor1(10, 20, 30); + var bin = MessagePackSerializer.Serialize(ctor, ContractlessStandardResolver.Options); + var r = MessagePackSerializer.Deserialize(bin, ContractlessStandardResolver.Options); + + r.CalledConstructorParameterCount.Is(3); + } + [Fact] public void IgnorePropertiesWithoutConstructorArgument() {