private IEnumerable <MemberDeclarationSyntax> GenerateNewNodes(PropertyDeclarationSyntax property)
        {
            TypeSyntax valueType = property.Type.DescendantNodes()
                                   .OfType <GenericNameSyntax>()
                                   .First()
                                   .TypeArgumentList.Arguments[1];

            bool isDynamic = SyntaxHelpers.IsDynamic(valueType, out bool isNullable);

            TypeSyntax wrapperType = isDynamic
                ? isNullable
                    ? _jsonSerializationNamespace.NullableDynamicAdditionalPropertiesDictionary
                    : _jsonSerializationNamespace.DynamicAdditionalPropertiesDictionary
                : _jsonSerializationNamespace.AdditionalPropertiesDictionary(valueType);

            yield return(_backingFieldDeclaration);

            yield return(FieldDeclaration(VariableDeclaration(
                                              NullableType(wrapperType),
                                              SingletonSeparatedList(VariableDeclarator(Identifier(WrapperFieldName)))))
                         .AddModifiers(Token(SyntaxKind.PrivateKeyword)));

            yield return(property
                         // Remove the getters and setters
                         .WithAccessorList(null)
                         // Remove the old initializer
                         .WithInitializer(null)
                         // Prevent serialization
                         .AddAttributeLists(AttributeList(SingletonSeparatedList(Attribute(NewtonsoftJsonTypes.JsonIgnoreAttributeName))))
                         // Provide an AdditionalPropertiesDictionary referencing the backing field
                         .WithExpressionBody(ArrowExpressionClause(
                                                 AssignmentExpression(SyntaxKind.CoalesceAssignmentExpression,
                                                                      IdentifierName(WrapperFieldName),
                                                                      ObjectCreationExpression(wrapperType)
                                                                      .AddArgumentListArguments(
                                                                          Argument(IdentifierName(BackingFieldName)))))));
        }