static string InnerBuildCSharpClass(string className, IList <TableFieldSchema> fields, Dictionary <string, string> innerClasses, DuplicateNamingStorage namingStorage)
        {
            var props = fields.Select(x =>
            {
                var name = x.Name;
                if (ReservedIdentifiers.Contains(name))
                {
                    name = "@" + name;
                }
                var type = ToCSharpType(name, x.Type, x.Mode);
                if (x.Type == "RECORD")
                {
                    var innerStoreCount = namingStorage.StoreName(name);
                    var newName         = name;
                    if (innerStoreCount != -1)
                    {
                        newName += "__" + innerStoreCount;
                    }

                    type = newName;
                    innerClasses[newName] = InnerBuildCSharpClass(newName, x.Fields, innerClasses, namingStorage);
                }

                return($"    [ColumnName(\"{x.Name}\")]public {type} {name} {{ get; set; }}");
            });

            var format = @"public class {0}
{{
{1}
}}";
            var result = string.Format(format, className, string.Join(Environment.NewLine, props));

            return(result);
        }
        static string InnerBuildCSharpClass(string className, IList<TableFieldSchema> fields, Dictionary<string, string> innerClasses, DuplicateNamingStorage namingStorage)
        {
            var props = fields.Select(x =>
            {
                var name = NameConverter.ConvertSafeName(x.Name);

                var type = ToCSharpType(name, x.Type, x.Mode);
                if (x.Type == "RECORD")
                {
                    var innerStoreCount = namingStorage.StoreName(name);
                    var newName = name;
                    if (innerStoreCount != -1)
                    {
                        newName += "__" + innerStoreCount;
                    }

                    type = newName;
                    innerClasses[newName] = InnerBuildCSharpClass(newName, x.Fields, innerClasses, namingStorage);
                }

                return $"    [ColumnName(\"{x.Name}\")]public {type} {name} {{ get; set; }}";
            });

            var format = @"public class {0}
{{
{1}
}}";
            var result = string.Format(format, className, string.Join(Environment.NewLine, props));

            return result;
        }