/// <summary> /// Generates C# code as per specified settings and properties. /// </summary> /// <param name="settings">C# generator settings</param> /// <param name="properties">Array of ClrProperty type</param> /// <returns>C# code body in string.</returns> public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties) { if (settings == null) { return(string.Empty); } if (properties == null) { return(string.Empty); } if (string.IsNullOrEmpty(settings.ClassName)) { return(string.Empty); } classBuilder.Clear(); AppendLine("using System;"); AppendLine("using System.Data;"); AppendLine(); bool hasNamespace = !string.IsNullOrEmpty(settings.Namespace); if (hasNamespace) { AppendLine($"namespace {settings.Namespace}"); OpenCurlyBraces(); } var modifier = Enum.GetName(typeof(Enums.AccessModifiers), settings.AccessModifier).ToLower(); if (modifier.Length > 0) { modifier = modifier + " "; } AppendLine($"{modifier}class {settings.ClassName} : DataTable"); //Class opens OpenCurlyBraces(); AppendLine($"{modifier} {settings.ClassName}()"); OpenCurlyBraces(); this.AppendLine($"this.TableName = this.GetType().Name;"); foreach (var p in properties) { this.AppendLine($"this.Columns.Add(\"{p.Name}\", typeof({p.PropertyType.GetDisplayName()}));"); } CloseCurlyBraces(); var rowClassName = $"{settings.ClassName}Row"; this.AppendLine(); this.AppendLine($"protected override Type GetRowType()"); OpenCurlyBraces(); this.AppendLine($"return typeof({rowClassName});"); CloseCurlyBraces(); this.AppendLine(); this.AppendLine($"public {rowClassName} this[int rowIndex]"); OpenCurlyBraces(); this.AppendLine($"get {{ return ({rowClassName})Rows[rowIndex]; }}"); CloseCurlyBraces(); this.AppendLine(); this.AppendLine($"public void AddRow({rowClassName} row)"); OpenCurlyBraces(); this.AppendLine($"Rows.Add(row);"); CloseCurlyBraces(); this.AppendLine(); this.AppendLine($"public new {rowClassName} NewRow()"); OpenCurlyBraces(); this.AppendLine($"return ({rowClassName})base.NewRow();"); CloseCurlyBraces(); //table class closes here CloseCurlyBraces(); this.AppendLine(); //Writing Row Class starts here this.AppendLine($"{modifier} class {rowClassName} : DataRow"); OpenCurlyBraces(); //Adding Constructor this.AppendLine(); this.AppendLine($"public {rowClassName}(DataRowBuilder rowBuilder) : base(rowBuilder) {{ }}"); this.AppendLine(); //Adding Property accessors foreach (var p in properties) { this.AppendLine($"public {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => ({p.PropertyType.GetDisplayName()})this[\"{p.Name}\"]; set => this[\"{p.Name}\"] = value;}}"); this.AppendLine(); } //Row Class closes here CloseCurlyBraces(); if (hasNamespace) { CloseCurlyBraces(); } return(classBuilder.ToString()); }
/// <summary> /// Generates C# code as per specified settings and properties. /// </summary> /// <param name="settings">C# generator settings</param> /// <param name="properties">Array of ClrProperty type</param> /// <returns>C# code body in string.</returns> public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties) { if (settings == null) { return(string.Empty); } if (properties == null) { return(string.Empty); } if (string.IsNullOrEmpty(settings.ClassName)) { return(string.Empty); } ClassBuilder = new StringBuilder(); //Add usings AppendLine("using System;"); if (settings.NullValueIgnoreHandling || settings.SnakeCaseNamingStrategy) { AppendLine("using Newtonsoft.Json"); } if (settings.SnakeCaseNamingStrategy) { AppendLine("using Newtonsoft.Json.Serialization"); } AppendLine(); var hasNamespace = !string.IsNullOrEmpty(settings.Namespace); //Add Namespace block if present. if (hasNamespace) { AppendLine($"namespace {settings.Namespace}"); OpenCurlyBraces(); } var modifier = Enum.GetName(typeof(AccessModifiers), settings.AccessModifier) ?.ToLower(); if (!string.IsNullOrEmpty(modifier)) { modifier += " "; } if (settings.SnakeCaseNamingStrategy || settings.NullValueIgnoreHandling) { var attributeValues = string.Empty; if (settings.NullValueIgnoreHandling) { attributeValues = "ItemNullValueHandling = NullValueHandling.Ignore"; } if (settings.SnakeCaseNamingStrategy) { if (settings.NullValueIgnoreHandling) { attributeValues += ", NamingStrategyType = typeof(SnakeCaseNamingStrategy)"; } else { attributeValues += "NamingStrategyType = typeof(SnakeCaseNamingStrategy)"; } } AppendLine($"[JsonObject({attributeValues})]"); } //Add class name AppendLine($"{modifier}class {settings.ClassName}"); //Class opens OpenCurlyBraces(); var firstProperty = true; foreach (var p in properties) { var typeName = GetTypeKeyword(p.PropertyType.GetDisplayName()); switch (settings.MemberType) { case MemberTypes.AutoProperties: AppendLine ( $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get; set; }}" ); break; case MemberTypes.FieldsOnly: AppendLine ( $"{AccessModifiers.Private.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix)} {{ get; set; }}" ); break; case MemberTypes.FieldEncapsulatedByproperties: if (!firstProperty) { AppendLine(); } var fldName = GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix); AppendLine($"{AccessModifiers.Private.ToString().ToLower()} {typeName} {fldName};"); if (settings.CustomLogicGetter.Length > 0 && settings.CustomLogicSetter.Length > 0) { AppendLine ( $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}" ); } else if (settings.CustomLogicGetter.Length > 0) { AppendLine ( $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set => {fldName} = value; }}" ); } else if (settings.CustomLogicSetter.Length > 0) { AppendLine ( $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}" ); } else { AppendLine ( $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set => {fldName} = value; }}" ); } break; } firstProperty = false; } //Class closes CloseCurlyBraces(); if (hasNamespace) { CloseCurlyBraces(); } return(ClassBuilder.ToString()); }
/// <summary> /// Generates C# code as per specified settings and properties. /// </summary> /// <param name="settings">C# generator settings</param> /// <param name="properties">Array of ClrProperty type</param> /// <returns>C# code body in string.</returns> public abstract string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties);
/// <summary> /// Generates C# code as per specified settings and properties. /// </summary> /// <param name="settings">C# generator settings</param> /// <param name="properties">Array of ClrProperty type</param> /// <returns>C# code body in string.</returns> public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties) { if (settings == null) { return(string.Empty); } if (properties == null) { return(string.Empty); } if (string.IsNullOrEmpty(settings.ClassName)) { return(string.Empty); } AppendLine("using System;"); AppendLine("using System.Data;"); if (settings.NullValueIgnoreHandling || settings.SnakeCaseNamingStrategy) { AppendLine("using Newtonsoft.Json"); } if (settings.SnakeCaseNamingStrategy) { AppendLine("using Newtonsoft.Json.Serialization"); } AppendLine(); var hasNamespace = !string.IsNullOrEmpty(settings.Namespace); if (hasNamespace) { AppendLine($"namespace {settings.Namespace}"); OpenCurlyBraces(); } var modifier = Enum.GetName(typeof(AccessModifiers), settings.AccessModifier) ?.ToLower(); if (!string.IsNullOrEmpty(modifier)) { modifier += " "; } if (settings.SnakeCaseNamingStrategy || settings.NullValueIgnoreHandling) { var attributeValues = string.Empty; if (settings.NullValueIgnoreHandling) { attributeValues = "ItemNullValueHandling = NullValueHandling.Ignore"; } if (settings.SnakeCaseNamingStrategy) { if (settings.NullValueIgnoreHandling) { attributeValues += ", NamingStrategyType = typeof(SnakeCaseNamingStrategy)"; } else { attributeValues += "NamingStrategyType = typeof(SnakeCaseNamingStrategy)"; } } AppendLine($"[JsonObject({attributeValues})]"); } AppendLine($"{modifier}class {settings.ClassName} : DataTable"); //Class opens OpenCurlyBraces(); AppendLine($"{modifier} {settings.ClassName}()"); OpenCurlyBraces(); AppendLine("this.TableName = this.GetType().Name;"); foreach (var p in properties) { AppendLine($"this.Columns.Add(\"{p.Name}\", typeof({p.PropertyType.GetDisplayName()}));"); } CloseCurlyBraces(); var rowClassName = $"{settings.ClassName}Row"; AppendLine(); AppendLine("protected override Type GetRowType()"); OpenCurlyBraces(); AppendLine($"return typeof({rowClassName});"); CloseCurlyBraces(); AppendLine(); AppendLine($"public {rowClassName} this[int rowIndex]"); OpenCurlyBraces(); AppendLine($"get {{ return ({rowClassName})Rows[rowIndex]; }}"); CloseCurlyBraces(); AppendLine(); AppendLine($"public void AddRow({rowClassName} row)"); OpenCurlyBraces(); AppendLine("Rows.Add(row);"); CloseCurlyBraces(); AppendLine(); AppendLine($"public new {rowClassName} NewRow()"); OpenCurlyBraces(); AppendLine($"return ({rowClassName})base.NewRow();"); CloseCurlyBraces(); //table class closes here CloseCurlyBraces(); AppendLine(); //Writing Row Class starts here AppendLine($"{modifier} class {rowClassName} : DataRow"); OpenCurlyBraces(); //Adding Constructor AppendLine(); AppendLine($"public {rowClassName}(DataRowBuilder rowBuilder) : base(rowBuilder) {{ }}"); AppendLine(); //Adding Property accessors foreach (var p in properties) { AppendLine ( $"public {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => ({p.PropertyType.GetDisplayName()})this[\"{p.Name}\"]; set => this[\"{p.Name}\"] = value;}}" ); AppendLine(); } //Row Class closes here CloseCurlyBraces(); if (hasNamespace) { CloseCurlyBraces(); } return(ClassBuilder.ToString()); }
/// <summary> /// Generates C# code as per specified settings and properties. /// </summary> /// <param name="settings">C# generator settings</param> /// <param name="properties">Array of ClrProperty type</param> /// <returns>C# code body in string.</returns> public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties) { if (settings == null) { return(string.Empty); } if (properties == null) { return(string.Empty); } if (string.IsNullOrEmpty(settings.ClassName)) { return(string.Empty); } classBuilder = new StringBuilder(); //Add usings AppendLine("using System;"); AppendLine(); bool hasNamespace = !string.IsNullOrEmpty(settings.Namespace); //Add Namespace block if present. if (hasNamespace) { AppendLine($"namespace {settings.Namespace}"); OpenCurlyBraces(); } var modifier = Enum.GetName(typeof(Enums.AccessModifiers), settings.AccessModifier).ToLower(); if (modifier.Length > 0) { modifier = modifier + " "; } //Add class name AppendLine($"{modifier}class {settings.ClassName}"); //Class opens OpenCurlyBraces(); bool firstProperty = true; foreach (var p in properties) { switch (settings.MemberType) { case MemberTypes.AutoProperties: AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get; set; }}"); break; case MemberTypes.FieldsOnly: AppendLine($"{AccessModifiers.Private.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix)} {{ get; set; }}"); break; case MemberTypes.FieldEncapsulatedByproperties: if (!firstProperty) { AppendLine(); } var fldName = GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix); AppendLine($"{AccessModifiers.Private.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {fldName};"); if (settings.CustomLogicGetter.Length > 0 && settings.CustomLogicSetter.Length > 0) { AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}"); } else if (settings.CustomLogicGetter.Length > 0) { AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set => {fldName} = value; }}"); } else if (settings.CustomLogicSetter.Length > 0) { AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}"); } else { AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set => {fldName} = value; }}"); } break; } firstProperty = false; } //Class closes CloseCurlyBraces(); if (hasNamespace) { CloseCurlyBraces(); } return(base.classBuilder.ToString()); }