diff --git a/YamlDotNet.Analyzers.StaticGenerator/SymbolExtensions.cs b/YamlDotNet.Analyzers.StaticGenerator/SymbolExtensions.cs index 6bbc8f54..91e8c470 100644 --- a/YamlDotNet.Analyzers.StaticGenerator/SymbolExtensions.cs +++ b/YamlDotNet.Analyzers.StaticGenerator/SymbolExtensions.cs @@ -82,6 +82,21 @@ static string GetFullName(this INamedTypeSymbol symbol) var space = GetNamespace(symbol); var suffix = GetGenericTypes(symbol.TypeArguments); ; + var containingSymbol = symbol.ContainingType; + while (containingSymbol != null) + { + if (string.IsNullOrWhiteSpace(space)) + { + space = containingSymbol.Name; + } + else + { + space = $"{space}.{containingSymbol.Name}"; + } + + containingSymbol = containingSymbol.ContainingType; + } + if (!string.IsNullOrWhiteSpace(space)) { return space + "." + symbol.Name + suffix + symbol.GetNullable(); diff --git a/YamlDotNet.Test/Analyzers/StaticGenerator/ObjectTests.cs b/YamlDotNet.Test/Analyzers/StaticGenerator/ObjectTests.cs index 53cac647..41d59c20 100644 --- a/YamlDotNet.Test/Analyzers/StaticGenerator/ObjectTests.cs +++ b/YamlDotNet.Test/Analyzers/StaticGenerator/ObjectTests.cs @@ -50,6 +50,8 @@ public void RegularObjectWorks() Inner: Prop1: a Prop2: 2 +Nested: + NestedProp: abc "; var actual = deserializer.Deserialize(yaml); Assert.Equal("hello", actual.Prop1); @@ -59,6 +61,8 @@ public void RegularObjectWorks() Assert.NotNull(actual.Inner); Assert.Equal("a", actual.Inner.Prop1); Assert.Equal(2, actual.Inner.Prop2); + Assert.NotNull(actual.Nested); + Assert.Equal("abc", actual.Nested.NestedProp); var serializer = new StaticSerializerBuilder(new StaticContext()).Build(); var actualYaml = serializer.Serialize(actual); @@ -69,6 +73,8 @@ public void RegularObjectWorks() Inner: Prop1: a Prop2: 2 +Nested: + NestedProp: abc "; Assert.Equal(yaml.NormalizeNewLines().TrimNewLines(), actualYaml.NormalizeNewLines().TrimNewLines()); } @@ -94,6 +100,13 @@ public class RegularObjectOuter [YamlIgnore] public string Ignored { get; set; } = "I am ignored"; public RegularObjectInner Inner { get; set; } + public NestedClass Nested { get; set; } + + [YamlSerializable] + public class NestedClass + { + public string NestedProp { get; set; } + } } [YamlSerializable]