diff --git a/src/System.Windows.Forms.Design/src/System/ComponentModel/Design/Serialization/CodeDomSerializerBase.cs b/src/System.Windows.Forms.Design/src/System/ComponentModel/Design/Serialization/CodeDomSerializerBase.cs index 5beb904d73b..63efbd0f7a0 100644 --- a/src/System.Windows.Forms.Design/src/System/ComponentModel/Design/Serialization/CodeDomSerializerBase.cs +++ b/src/System.Windows.Forms.Design/src/System/ComponentModel/Design/Serialization/CodeDomSerializerBase.cs @@ -78,6 +78,7 @@ private static void GetTypeNameFromCodeTypeReferenceHelper(IDesignerSerializatio else { //create the MyGeneric`2[ part + typeName.Append(typeref.BaseType); if (!typeref.BaseType.Contains('`')) { typeName.Append($"`{typeref.TypeArguments.Count}"); diff --git a/src/System.Windows.Forms.Design/tests/UnitTests/Serialization/CodeDomSerializerTests.cs b/src/System.Windows.Forms.Design/tests/UnitTests/Serialization/CodeDomSerializerTests.cs index bc74b9c8b43..111a3dde4e6 100644 --- a/src/System.Windows.Forms.Design/tests/UnitTests/Serialization/CodeDomSerializerTests.cs +++ b/src/System.Windows.Forms.Design/tests/UnitTests/Serialization/CodeDomSerializerTests.cs @@ -1,7 +1,10 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.CodeDom; +using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; +using Moq; namespace System.Windows.Forms.Design.Serialization.Tests; @@ -13,4 +16,26 @@ public void CodeDomSerializer_Constructor() CodeDomSerializer underTest = new(); Assert.NotNull(underTest); } + + [Fact] + public void CodeDomSerializer_Deserialize_GenericTypeRef() + { + CodeDomSerializer underTest = new(); + Type type = typeof(List); + CodeTypeOfExpression expression = new(new CodeTypeReference(type)); + + Mock mockManager = new(MockBehavior.Strict); + mockManager + .Setup(s => s.GetService(typeof(TypeDescriptionProviderService))) + .Returns(null); + mockManager + .Setup(s => s.GetType("System.Int32")) + .Returns(typeof(int)); + mockManager + .Setup(s => s.GetType($"System.Collections.Generic.List`1[[System.Nullable`1[[{typeof(int).AssemblyQualifiedName}]]]]")) + .Returns(type); + + object result = underTest.Deserialize(mockManager.Object, expression); + Assert.Equal(type, result); + } }