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 110f2647402..94f8049366f 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 @@ -74,6 +74,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 97cf1c110d3..dfd7d754a88 100644 --- a/src/System.Windows.Forms.Design/tests/UnitTests/Serialization/CodeDomSerializerTests.cs +++ b/src/System.Windows.Forms.Design/tests/UnitTests/Serialization/CodeDomSerializerTests.cs @@ -3,7 +3,10 @@ #nullable disable +using System.CodeDom; +using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; +using Moq; namespace System.Windows.Forms.Design.Serialization.Tests; @@ -15,4 +18,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); + } }