/*
 * OpenAPI Petstore
 *
 * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
 *
 * The version of the OpenAPI document: 1.0.0
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using FileParameter = Org.OpenAPITools.Client.FileParameter;
using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter;
using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils;

namespace Org.OpenAPITools.Model
{
    /// <summary>
    /// RequiredClass
    /// </summary>
    [DataContract(Name = "RequiredClass")]
    public partial class RequiredClass : IEquatable<RequiredClass>, IValidatableObject
    {
        /// <summary>
        /// Defines RequiredNullableEnumInteger
        /// </summary>
        public enum RequiredNullableEnumIntegerEnum
        {
            /// <summary>
            /// Enum NUMBER_1 for value: 1
            /// </summary>
            NUMBER_1 = 1,

            /// <summary>
            /// Enum NUMBER_MINUS_1 for value: -1
            /// </summary>
            NUMBER_MINUS_1 = -1
        }


        /// <summary>
        /// Gets or Sets RequiredNullableEnumInteger
        /// </summary>
        [DataMember(Name = "required_nullable_enum_integer", IsRequired = true, EmitDefaultValue = true)]
        public RequiredNullableEnumIntegerEnum RequiredNullableEnumInteger { get; set; }
        /// <summary>
        /// Defines RequiredNotnullableEnumInteger
        /// </summary>
        public enum RequiredNotnullableEnumIntegerEnum
        {
            /// <summary>
            /// Enum NUMBER_1 for value: 1
            /// </summary>
            NUMBER_1 = 1,

            /// <summary>
            /// Enum NUMBER_MINUS_1 for value: -1
            /// </summary>
            NUMBER_MINUS_1 = -1
        }


        /// <summary>
        /// Gets or Sets RequiredNotnullableEnumInteger
        /// </summary>
        [DataMember(Name = "required_notnullable_enum_integer", IsRequired = true, EmitDefaultValue = true)]
        public RequiredNotnullableEnumIntegerEnum RequiredNotnullableEnumInteger { get; set; }
        /// <summary>
        /// Defines NotrequiredNullableEnumInteger
        /// </summary>
        public enum NotrequiredNullableEnumIntegerEnum
        {
            /// <summary>
            /// Enum NUMBER_1 for value: 1
            /// </summary>
            NUMBER_1 = 1,

            /// <summary>
            /// Enum NUMBER_MINUS_1 for value: -1
            /// </summary>
            NUMBER_MINUS_1 = -1
        }


        /// <summary>
        /// Gets or Sets NotrequiredNullableEnumInteger
        /// </summary>
        [DataMember(Name = "notrequired_nullable_enum_integer", EmitDefaultValue = true)]
        public NotrequiredNullableEnumIntegerEnum? NotrequiredNullableEnumInteger { get; set; }
        /// <summary>
        /// Defines NotrequiredNotnullableEnumInteger
        /// </summary>
        public enum NotrequiredNotnullableEnumIntegerEnum
        {
            /// <summary>
            /// Enum NUMBER_1 for value: 1
            /// </summary>
            NUMBER_1 = 1,

            /// <summary>
            /// Enum NUMBER_MINUS_1 for value: -1
            /// </summary>
            NUMBER_MINUS_1 = -1
        }


        /// <summary>
        /// Gets or Sets NotrequiredNotnullableEnumInteger
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_enum_integer", EmitDefaultValue = false)]
        public NotrequiredNotnullableEnumIntegerEnum? NotrequiredNotnullableEnumInteger { get; set; }
        /// <summary>
        /// Defines RequiredNullableEnumIntegerOnly
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum RequiredNullableEnumIntegerOnlyEnum
        {
            /// <summary>
            /// Enum NUMBER_2 for value: 2
            /// </summary>
            NUMBER_2 = 2,

            /// <summary>
            /// Enum NUMBER_MINUS_2 for value: -2
            /// </summary>
            NUMBER_MINUS_2 = -2
        }


        /// <summary>
        /// Gets or Sets RequiredNullableEnumIntegerOnly
        /// </summary>
        [DataMember(Name = "required_nullable_enum_integer_only", IsRequired = true, EmitDefaultValue = true)]
        public RequiredNullableEnumIntegerOnlyEnum RequiredNullableEnumIntegerOnly { get; set; }
        /// <summary>
        /// Defines RequiredNotnullableEnumIntegerOnly
        /// </summary>
        public enum RequiredNotnullableEnumIntegerOnlyEnum
        {
            /// <summary>
            /// Enum NUMBER_2 for value: 2
            /// </summary>
            NUMBER_2 = 2,

            /// <summary>
            /// Enum NUMBER_MINUS_2 for value: -2
            /// </summary>
            NUMBER_MINUS_2 = -2
        }


        /// <summary>
        /// Gets or Sets RequiredNotnullableEnumIntegerOnly
        /// </summary>
        [DataMember(Name = "required_notnullable_enum_integer_only", IsRequired = true, EmitDefaultValue = true)]
        public RequiredNotnullableEnumIntegerOnlyEnum RequiredNotnullableEnumIntegerOnly { get; set; }
        /// <summary>
        /// Defines NotrequiredNullableEnumIntegerOnly
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum NotrequiredNullableEnumIntegerOnlyEnum
        {
            /// <summary>
            /// Enum NUMBER_2 for value: 2
            /// </summary>
            NUMBER_2 = 2,

            /// <summary>
            /// Enum NUMBER_MINUS_2 for value: -2
            /// </summary>
            NUMBER_MINUS_2 = -2
        }


        /// <summary>
        /// Gets or Sets NotrequiredNullableEnumIntegerOnly
        /// </summary>
        [DataMember(Name = "notrequired_nullable_enum_integer_only", EmitDefaultValue = true)]
        public NotrequiredNullableEnumIntegerOnlyEnum? NotrequiredNullableEnumIntegerOnly { get; set; }
        /// <summary>
        /// Defines NotrequiredNotnullableEnumIntegerOnly
        /// </summary>
        public enum NotrequiredNotnullableEnumIntegerOnlyEnum
        {
            /// <summary>
            /// Enum NUMBER_2 for value: 2
            /// </summary>
            NUMBER_2 = 2,

            /// <summary>
            /// Enum NUMBER_MINUS_2 for value: -2
            /// </summary>
            NUMBER_MINUS_2 = -2
        }


        /// <summary>
        /// Gets or Sets NotrequiredNotnullableEnumIntegerOnly
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_enum_integer_only", EmitDefaultValue = false)]
        public NotrequiredNotnullableEnumIntegerOnlyEnum? NotrequiredNotnullableEnumIntegerOnly { get; set; }
        /// <summary>
        /// Defines RequiredNotnullableEnumString
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum RequiredNotnullableEnumStringEnum
        {
            /// <summary>
            /// Enum UPPER for value: UPPER
            /// </summary>
            [EnumMember(Value = "UPPER")]
            UPPER = 1,

            /// <summary>
            /// Enum Lower for value: lower
            /// </summary>
            [EnumMember(Value = "lower")]
            Lower = 2,

            /// <summary>
            /// Enum Empty for value: 
            /// </summary>
            [EnumMember(Value = "")]
            Empty = 3,

            /// <summary>
            /// Enum ValuewithTab for value: Value\twith tab
            /// </summary>
            [EnumMember(Value = "Value\twith tab")]
            ValuewithTab = 4,

            /// <summary>
            /// Enum ValueWithQuote for value: Value with \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with \" quote")]
            ValueWithQuote = 5,

            /// <summary>
            /// Enum ValueWithEscapedQuote for value: Value with escaped \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with escaped \" quote")]
            ValueWithEscapedQuote = 6,

            /// <summary>
            /// Enum Duplicatevalue for value: Duplicate\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\nvalue")]
            Duplicatevalue = 7,

            /// <summary>
            /// Enum Duplicatevalue2 for value: Duplicate\r\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\r\nvalue")]
            Duplicatevalue2 = 8
        }


        /// <summary>
        /// Gets or Sets RequiredNotnullableEnumString
        /// </summary>
        [DataMember(Name = "required_notnullable_enum_string", IsRequired = true, EmitDefaultValue = true)]
        public RequiredNotnullableEnumStringEnum RequiredNotnullableEnumString { get; set; }
        /// <summary>
        /// Defines RequiredNullableEnumString
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum RequiredNullableEnumStringEnum
        {
            /// <summary>
            /// Enum UPPER for value: UPPER
            /// </summary>
            [EnumMember(Value = "UPPER")]
            UPPER = 1,

            /// <summary>
            /// Enum Lower for value: lower
            /// </summary>
            [EnumMember(Value = "lower")]
            Lower = 2,

            /// <summary>
            /// Enum Empty for value: 
            /// </summary>
            [EnumMember(Value = "")]
            Empty = 3,

            /// <summary>
            /// Enum ValuewithTab for value: Value\twith tab
            /// </summary>
            [EnumMember(Value = "Value\twith tab")]
            ValuewithTab = 4,

            /// <summary>
            /// Enum ValueWithQuote for value: Value with \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with \" quote")]
            ValueWithQuote = 5,

            /// <summary>
            /// Enum ValueWithEscapedQuote for value: Value with escaped \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with escaped \" quote")]
            ValueWithEscapedQuote = 6,

            /// <summary>
            /// Enum Duplicatevalue for value: Duplicate\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\nvalue")]
            Duplicatevalue = 7,

            /// <summary>
            /// Enum Duplicatevalue2 for value: Duplicate\r\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\r\nvalue")]
            Duplicatevalue2 = 8
        }


        /// <summary>
        /// Gets or Sets RequiredNullableEnumString
        /// </summary>
        [DataMember(Name = "required_nullable_enum_string", IsRequired = true, EmitDefaultValue = true)]
        public RequiredNullableEnumStringEnum RequiredNullableEnumString { get; set; }
        /// <summary>
        /// Defines NotrequiredNullableEnumString
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum NotrequiredNullableEnumStringEnum
        {
            /// <summary>
            /// Enum UPPER for value: UPPER
            /// </summary>
            [EnumMember(Value = "UPPER")]
            UPPER = 1,

            /// <summary>
            /// Enum Lower for value: lower
            /// </summary>
            [EnumMember(Value = "lower")]
            Lower = 2,

            /// <summary>
            /// Enum Empty for value: 
            /// </summary>
            [EnumMember(Value = "")]
            Empty = 3,

            /// <summary>
            /// Enum ValuewithTab for value: Value\twith tab
            /// </summary>
            [EnumMember(Value = "Value\twith tab")]
            ValuewithTab = 4,

            /// <summary>
            /// Enum ValueWithQuote for value: Value with \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with \" quote")]
            ValueWithQuote = 5,

            /// <summary>
            /// Enum ValueWithEscapedQuote for value: Value with escaped \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with escaped \" quote")]
            ValueWithEscapedQuote = 6,

            /// <summary>
            /// Enum Duplicatevalue for value: Duplicate\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\nvalue")]
            Duplicatevalue = 7,

            /// <summary>
            /// Enum Duplicatevalue2 for value: Duplicate\r\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\r\nvalue")]
            Duplicatevalue2 = 8
        }


        /// <summary>
        /// Gets or Sets NotrequiredNullableEnumString
        /// </summary>
        [DataMember(Name = "notrequired_nullable_enum_string", EmitDefaultValue = true)]
        public NotrequiredNullableEnumStringEnum? NotrequiredNullableEnumString { get; set; }
        /// <summary>
        /// Defines NotrequiredNotnullableEnumString
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum NotrequiredNotnullableEnumStringEnum
        {
            /// <summary>
            /// Enum UPPER for value: UPPER
            /// </summary>
            [EnumMember(Value = "UPPER")]
            UPPER = 1,

            /// <summary>
            /// Enum Lower for value: lower
            /// </summary>
            [EnumMember(Value = "lower")]
            Lower = 2,

            /// <summary>
            /// Enum Empty for value: 
            /// </summary>
            [EnumMember(Value = "")]
            Empty = 3,

            /// <summary>
            /// Enum ValuewithTab for value: Value\twith tab
            /// </summary>
            [EnumMember(Value = "Value\twith tab")]
            ValuewithTab = 4,

            /// <summary>
            /// Enum ValueWithQuote for value: Value with \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with \" quote")]
            ValueWithQuote = 5,

            /// <summary>
            /// Enum ValueWithEscapedQuote for value: Value with escaped \&quot; quote
            /// </summary>
            [EnumMember(Value = "Value with escaped \" quote")]
            ValueWithEscapedQuote = 6,

            /// <summary>
            /// Enum Duplicatevalue for value: Duplicate\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\nvalue")]
            Duplicatevalue = 7,

            /// <summary>
            /// Enum Duplicatevalue2 for value: Duplicate\r\nvalue
            /// </summary>
            [EnumMember(Value = "Duplicate\r\nvalue")]
            Duplicatevalue2 = 8
        }


        /// <summary>
        /// Gets or Sets NotrequiredNotnullableEnumString
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_enum_string", EmitDefaultValue = false)]
        public NotrequiredNotnullableEnumStringEnum? NotrequiredNotnullableEnumString { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNullableOuterEnumDefaultValue
        /// </summary>
        [DataMember(Name = "required_nullable_outerEnumDefaultValue", IsRequired = true, EmitDefaultValue = true)]
        public OuterEnumDefaultValue RequiredNullableOuterEnumDefaultValue { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotnullableOuterEnumDefaultValue
        /// </summary>
        [DataMember(Name = "required_notnullable_outerEnumDefaultValue", IsRequired = true, EmitDefaultValue = true)]
        public OuterEnumDefaultValue RequiredNotnullableOuterEnumDefaultValue { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNullableOuterEnumDefaultValue
        /// </summary>
        [DataMember(Name = "notrequired_nullable_outerEnumDefaultValue", EmitDefaultValue = true)]
        public OuterEnumDefaultValue? NotrequiredNullableOuterEnumDefaultValue { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNotnullableOuterEnumDefaultValue
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_outerEnumDefaultValue", EmitDefaultValue = false)]
        public OuterEnumDefaultValue? NotrequiredNotnullableOuterEnumDefaultValue { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="RequiredClass" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected RequiredClass()
        {
            this.AdditionalProperties = new Dictionary<string, object>();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="RequiredClass" /> class.
        /// </summary>
        /// <param name="requiredNullableIntegerProp">requiredNullableIntegerProp (required).</param>
        /// <param name="requiredNotnullableintegerProp">requiredNotnullableintegerProp (required).</param>
        /// <param name="notRequiredNullableIntegerProp">notRequiredNullableIntegerProp.</param>
        /// <param name="notRequiredNotnullableintegerProp">notRequiredNotnullableintegerProp.</param>
        /// <param name="requiredNullableStringProp">requiredNullableStringProp (required).</param>
        /// <param name="requiredNotnullableStringProp">requiredNotnullableStringProp (required).</param>
        /// <param name="notrequiredNullableStringProp">notrequiredNullableStringProp.</param>
        /// <param name="notrequiredNotnullableStringProp">notrequiredNotnullableStringProp.</param>
        /// <param name="requiredNullableBooleanProp">requiredNullableBooleanProp (required).</param>
        /// <param name="requiredNotnullableBooleanProp">requiredNotnullableBooleanProp (required).</param>
        /// <param name="notrequiredNullableBooleanProp">notrequiredNullableBooleanProp.</param>
        /// <param name="notrequiredNotnullableBooleanProp">notrequiredNotnullableBooleanProp.</param>
        /// <param name="requiredNullableDateProp">requiredNullableDateProp (required).</param>
        /// <param name="requiredNotNullableDateProp">requiredNotNullableDateProp (required).</param>
        /// <param name="notRequiredNullableDateProp">notRequiredNullableDateProp.</param>
        /// <param name="notRequiredNotnullableDateProp">notRequiredNotnullableDateProp.</param>
        /// <param name="requiredNotnullableDatetimeProp">requiredNotnullableDatetimeProp (required).</param>
        /// <param name="requiredNullableDatetimeProp">requiredNullableDatetimeProp (required).</param>
        /// <param name="notrequiredNullableDatetimeProp">notrequiredNullableDatetimeProp.</param>
        /// <param name="notrequiredNotnullableDatetimeProp">notrequiredNotnullableDatetimeProp.</param>
        /// <param name="requiredNullableEnumInteger">requiredNullableEnumInteger (required).</param>
        /// <param name="requiredNotnullableEnumInteger">requiredNotnullableEnumInteger (required).</param>
        /// <param name="notrequiredNullableEnumInteger">notrequiredNullableEnumInteger.</param>
        /// <param name="notrequiredNotnullableEnumInteger">notrequiredNotnullableEnumInteger.</param>
        /// <param name="requiredNullableEnumIntegerOnly">requiredNullableEnumIntegerOnly (required).</param>
        /// <param name="requiredNotnullableEnumIntegerOnly">requiredNotnullableEnumIntegerOnly (required).</param>
        /// <param name="notrequiredNullableEnumIntegerOnly">notrequiredNullableEnumIntegerOnly.</param>
        /// <param name="notrequiredNotnullableEnumIntegerOnly">notrequiredNotnullableEnumIntegerOnly.</param>
        /// <param name="requiredNotnullableEnumString">requiredNotnullableEnumString (required).</param>
        /// <param name="requiredNullableEnumString">requiredNullableEnumString (required).</param>
        /// <param name="notrequiredNullableEnumString">notrequiredNullableEnumString.</param>
        /// <param name="notrequiredNotnullableEnumString">notrequiredNotnullableEnumString.</param>
        /// <param name="requiredNullableOuterEnumDefaultValue">requiredNullableOuterEnumDefaultValue (required).</param>
        /// <param name="requiredNotnullableOuterEnumDefaultValue">requiredNotnullableOuterEnumDefaultValue (required).</param>
        /// <param name="notrequiredNullableOuterEnumDefaultValue">notrequiredNullableOuterEnumDefaultValue.</param>
        /// <param name="notrequiredNotnullableOuterEnumDefaultValue">notrequiredNotnullableOuterEnumDefaultValue.</param>
        /// <param name="requiredNullableUuid">requiredNullableUuid (required).</param>
        /// <param name="requiredNotnullableUuid">requiredNotnullableUuid (required).</param>
        /// <param name="notrequiredNullableUuid">notrequiredNullableUuid.</param>
        /// <param name="notrequiredNotnullableUuid">notrequiredNotnullableUuid.</param>
        /// <param name="requiredNullableArrayOfString">requiredNullableArrayOfString (required).</param>
        /// <param name="requiredNotnullableArrayOfString">requiredNotnullableArrayOfString (required).</param>
        /// <param name="notrequiredNullableArrayOfString">notrequiredNullableArrayOfString.</param>
        /// <param name="notrequiredNotnullableArrayOfString">notrequiredNotnullableArrayOfString.</param>
        public RequiredClass(int? requiredNullableIntegerProp = default(int?), int requiredNotnullableintegerProp = default(int), int? notRequiredNullableIntegerProp = default(int?), int notRequiredNotnullableintegerProp = default(int), string requiredNullableStringProp = default(string), string requiredNotnullableStringProp = default(string), string notrequiredNullableStringProp = default(string), string notrequiredNotnullableStringProp = default(string), bool? requiredNullableBooleanProp = default(bool?), bool requiredNotnullableBooleanProp = default(bool), bool? notrequiredNullableBooleanProp = default(bool?), bool notrequiredNotnullableBooleanProp = default(bool), DateTime? requiredNullableDateProp = default(DateTime?), DateTime requiredNotNullableDateProp = default(DateTime), DateTime? notRequiredNullableDateProp = default(DateTime?), DateTime notRequiredNotnullableDateProp = default(DateTime), DateTime requiredNotnullableDatetimeProp = default(DateTime), DateTime? requiredNullableDatetimeProp = default(DateTime?), DateTime? notrequiredNullableDatetimeProp = default(DateTime?), DateTime notrequiredNotnullableDatetimeProp = default(DateTime), RequiredNullableEnumIntegerEnum requiredNullableEnumInteger = default(RequiredNullableEnumIntegerEnum), RequiredNotnullableEnumIntegerEnum requiredNotnullableEnumInteger = default(RequiredNotnullableEnumIntegerEnum), NotrequiredNullableEnumIntegerEnum? notrequiredNullableEnumInteger = default(NotrequiredNullableEnumIntegerEnum?), NotrequiredNotnullableEnumIntegerEnum? notrequiredNotnullableEnumInteger = default(NotrequiredNotnullableEnumIntegerEnum?), RequiredNullableEnumIntegerOnlyEnum requiredNullableEnumIntegerOnly = default(RequiredNullableEnumIntegerOnlyEnum), RequiredNotnullableEnumIntegerOnlyEnum requiredNotnullableEnumIntegerOnly = default(RequiredNotnullableEnumIntegerOnlyEnum), NotrequiredNullableEnumIntegerOnlyEnum? notrequiredNullableEnumIntegerOnly = default(NotrequiredNullableEnumIntegerOnlyEnum?), NotrequiredNotnullableEnumIntegerOnlyEnum? notrequiredNotnullableEnumIntegerOnly = default(NotrequiredNotnullableEnumIntegerOnlyEnum?), RequiredNotnullableEnumStringEnum requiredNotnullableEnumString = default(RequiredNotnullableEnumStringEnum), RequiredNullableEnumStringEnum requiredNullableEnumString = default(RequiredNullableEnumStringEnum), NotrequiredNullableEnumStringEnum? notrequiredNullableEnumString = default(NotrequiredNullableEnumStringEnum?), NotrequiredNotnullableEnumStringEnum? notrequiredNotnullableEnumString = default(NotrequiredNotnullableEnumStringEnum?), OuterEnumDefaultValue requiredNullableOuterEnumDefaultValue = default(OuterEnumDefaultValue), OuterEnumDefaultValue requiredNotnullableOuterEnumDefaultValue = default(OuterEnumDefaultValue), OuterEnumDefaultValue? notrequiredNullableOuterEnumDefaultValue = default(OuterEnumDefaultValue?), OuterEnumDefaultValue? notrequiredNotnullableOuterEnumDefaultValue = default(OuterEnumDefaultValue?), Guid? requiredNullableUuid = default(Guid?), Guid requiredNotnullableUuid = default(Guid), Guid? notrequiredNullableUuid = default(Guid?), Guid notrequiredNotnullableUuid = default(Guid), List<string> requiredNullableArrayOfString = default(List<string>), List<string> requiredNotnullableArrayOfString = default(List<string>), List<string> notrequiredNullableArrayOfString = default(List<string>), List<string> notrequiredNotnullableArrayOfString = default(List<string>))
        {
            // to ensure "requiredNullableIntegerProp" is required (not null)
            if (requiredNullableIntegerProp == null)
            {
                throw new ArgumentNullException("requiredNullableIntegerProp is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNullableIntegerProp = requiredNullableIntegerProp;
            this.RequiredNotnullableintegerProp = requiredNotnullableintegerProp;
            // to ensure "requiredNullableStringProp" is required (not null)
            if (requiredNullableStringProp == null)
            {
                throw new ArgumentNullException("requiredNullableStringProp is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNullableStringProp = requiredNullableStringProp;
            // to ensure "requiredNotnullableStringProp" is required (not null)
            if (requiredNotnullableStringProp == null)
            {
                throw new ArgumentNullException("requiredNotnullableStringProp is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNotnullableStringProp = requiredNotnullableStringProp;
            // to ensure "requiredNullableBooleanProp" is required (not null)
            if (requiredNullableBooleanProp == null)
            {
                throw new ArgumentNullException("requiredNullableBooleanProp is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNullableBooleanProp = requiredNullableBooleanProp;
            this.RequiredNotnullableBooleanProp = requiredNotnullableBooleanProp;
            // to ensure "requiredNullableDateProp" is required (not null)
            if (requiredNullableDateProp == null)
            {
                throw new ArgumentNullException("requiredNullableDateProp is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNullableDateProp = requiredNullableDateProp;
            this.RequiredNotNullableDateProp = requiredNotNullableDateProp;
            this.RequiredNotnullableDatetimeProp = requiredNotnullableDatetimeProp;
            // to ensure "requiredNullableDatetimeProp" is required (not null)
            if (requiredNullableDatetimeProp == null)
            {
                throw new ArgumentNullException("requiredNullableDatetimeProp is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNullableDatetimeProp = requiredNullableDatetimeProp;
            this.RequiredNullableEnumInteger = requiredNullableEnumInteger;
            this.RequiredNotnullableEnumInteger = requiredNotnullableEnumInteger;
            this.RequiredNullableEnumIntegerOnly = requiredNullableEnumIntegerOnly;
            this.RequiredNotnullableEnumIntegerOnly = requiredNotnullableEnumIntegerOnly;
            this.RequiredNotnullableEnumString = requiredNotnullableEnumString;
            this.RequiredNullableEnumString = requiredNullableEnumString;
            this.RequiredNullableOuterEnumDefaultValue = requiredNullableOuterEnumDefaultValue;
            this.RequiredNotnullableOuterEnumDefaultValue = requiredNotnullableOuterEnumDefaultValue;
            // to ensure "requiredNullableUuid" is required (not null)
            if (requiredNullableUuid == null)
            {
                throw new ArgumentNullException("requiredNullableUuid is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNullableUuid = requiredNullableUuid;
            this.RequiredNotnullableUuid = requiredNotnullableUuid;
            // to ensure "requiredNullableArrayOfString" is required (not null)
            if (requiredNullableArrayOfString == null)
            {
                throw new ArgumentNullException("requiredNullableArrayOfString is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNullableArrayOfString = requiredNullableArrayOfString;
            // to ensure "requiredNotnullableArrayOfString" is required (not null)
            if (requiredNotnullableArrayOfString == null)
            {
                throw new ArgumentNullException("requiredNotnullableArrayOfString is a required property for RequiredClass and cannot be null");
            }
            this.RequiredNotnullableArrayOfString = requiredNotnullableArrayOfString;
            this.NotRequiredNullableIntegerProp = notRequiredNullableIntegerProp;
            this.NotRequiredNotnullableintegerProp = notRequiredNotnullableintegerProp;
            this.NotrequiredNullableStringProp = notrequiredNullableStringProp;
            this.NotrequiredNotnullableStringProp = notrequiredNotnullableStringProp;
            this.NotrequiredNullableBooleanProp = notrequiredNullableBooleanProp;
            this.NotrequiredNotnullableBooleanProp = notrequiredNotnullableBooleanProp;
            this.NotRequiredNullableDateProp = notRequiredNullableDateProp;
            this.NotRequiredNotnullableDateProp = notRequiredNotnullableDateProp;
            this.NotrequiredNullableDatetimeProp = notrequiredNullableDatetimeProp;
            this.NotrequiredNotnullableDatetimeProp = notrequiredNotnullableDatetimeProp;
            this.NotrequiredNullableEnumInteger = notrequiredNullableEnumInteger;
            this.NotrequiredNotnullableEnumInteger = notrequiredNotnullableEnumInteger;
            this.NotrequiredNullableEnumIntegerOnly = notrequiredNullableEnumIntegerOnly;
            this.NotrequiredNotnullableEnumIntegerOnly = notrequiredNotnullableEnumIntegerOnly;
            this.NotrequiredNullableEnumString = notrequiredNullableEnumString;
            this.NotrequiredNotnullableEnumString = notrequiredNotnullableEnumString;
            this.NotrequiredNullableOuterEnumDefaultValue = notrequiredNullableOuterEnumDefaultValue;
            this.NotrequiredNotnullableOuterEnumDefaultValue = notrequiredNotnullableOuterEnumDefaultValue;
            this.NotrequiredNullableUuid = notrequiredNullableUuid;
            this.NotrequiredNotnullableUuid = notrequiredNotnullableUuid;
            this.NotrequiredNullableArrayOfString = notrequiredNullableArrayOfString;
            this.NotrequiredNotnullableArrayOfString = notrequiredNotnullableArrayOfString;
            this.AdditionalProperties = new Dictionary<string, object>();
        }

        /// <summary>
        /// Gets or Sets RequiredNullableIntegerProp
        /// </summary>
        [DataMember(Name = "required_nullable_integer_prop", IsRequired = true, EmitDefaultValue = true)]
        public int? RequiredNullableIntegerProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotnullableintegerProp
        /// </summary>
        [DataMember(Name = "required_notnullableinteger_prop", IsRequired = true, EmitDefaultValue = true)]
        public int RequiredNotnullableintegerProp { get; set; }

        /// <summary>
        /// Gets or Sets NotRequiredNullableIntegerProp
        /// </summary>
        [DataMember(Name = "not_required_nullable_integer_prop", EmitDefaultValue = true)]
        public int? NotRequiredNullableIntegerProp { get; set; }

        /// <summary>
        /// Gets or Sets NotRequiredNotnullableintegerProp
        /// </summary>
        [DataMember(Name = "not_required_notnullableinteger_prop", EmitDefaultValue = false)]
        public int NotRequiredNotnullableintegerProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNullableStringProp
        /// </summary>
        [DataMember(Name = "required_nullable_string_prop", IsRequired = true, EmitDefaultValue = true)]
        public string RequiredNullableStringProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotnullableStringProp
        /// </summary>
        [DataMember(Name = "required_notnullable_string_prop", IsRequired = true, EmitDefaultValue = true)]
        public string RequiredNotnullableStringProp { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNullableStringProp
        /// </summary>
        [DataMember(Name = "notrequired_nullable_string_prop", EmitDefaultValue = true)]
        public string NotrequiredNullableStringProp { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNotnullableStringProp
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_string_prop", EmitDefaultValue = false)]
        public string NotrequiredNotnullableStringProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNullableBooleanProp
        /// </summary>
        [DataMember(Name = "required_nullable_boolean_prop", IsRequired = true, EmitDefaultValue = true)]
        public bool? RequiredNullableBooleanProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotnullableBooleanProp
        /// </summary>
        [DataMember(Name = "required_notnullable_boolean_prop", IsRequired = true, EmitDefaultValue = true)]
        public bool RequiredNotnullableBooleanProp { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNullableBooleanProp
        /// </summary>
        [DataMember(Name = "notrequired_nullable_boolean_prop", EmitDefaultValue = true)]
        public bool? NotrequiredNullableBooleanProp { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNotnullableBooleanProp
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_boolean_prop", EmitDefaultValue = true)]
        public bool NotrequiredNotnullableBooleanProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNullableDateProp
        /// </summary>
        [DataMember(Name = "required_nullable_date_prop", IsRequired = true, EmitDefaultValue = true)]
        [JsonConverter(typeof(OpenAPIDateConverter))]
        public DateTime? RequiredNullableDateProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotNullableDateProp
        /// </summary>
        [DataMember(Name = "required_not_nullable_date_prop", IsRequired = true, EmitDefaultValue = true)]
        [JsonConverter(typeof(OpenAPIDateConverter))]
        public DateTime RequiredNotNullableDateProp { get; set; }

        /// <summary>
        /// Gets or Sets NotRequiredNullableDateProp
        /// </summary>
        [DataMember(Name = "not_required_nullable_date_prop", EmitDefaultValue = true)]
        [JsonConverter(typeof(OpenAPIDateConverter))]
        public DateTime? NotRequiredNullableDateProp { get; set; }

        /// <summary>
        /// Gets or Sets NotRequiredNotnullableDateProp
        /// </summary>
        [DataMember(Name = "not_required_notnullable_date_prop", EmitDefaultValue = false)]
        [JsonConverter(typeof(OpenAPIDateConverter))]
        public DateTime NotRequiredNotnullableDateProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotnullableDatetimeProp
        /// </summary>
        [DataMember(Name = "required_notnullable_datetime_prop", IsRequired = true, EmitDefaultValue = true)]
        public DateTime RequiredNotnullableDatetimeProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNullableDatetimeProp
        /// </summary>
        [DataMember(Name = "required_nullable_datetime_prop", IsRequired = true, EmitDefaultValue = true)]
        public DateTime? RequiredNullableDatetimeProp { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNullableDatetimeProp
        /// </summary>
        [DataMember(Name = "notrequired_nullable_datetime_prop", EmitDefaultValue = true)]
        public DateTime? NotrequiredNullableDatetimeProp { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNotnullableDatetimeProp
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_datetime_prop", EmitDefaultValue = false)]
        public DateTime NotrequiredNotnullableDatetimeProp { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNullableUuid
        /// </summary>
        /// <example>72f98069-206d-4f12-9f12-3d1e525a8e84</example>
        [DataMember(Name = "required_nullable_uuid", IsRequired = true, EmitDefaultValue = true)]
        public Guid? RequiredNullableUuid { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotnullableUuid
        /// </summary>
        /// <example>72f98069-206d-4f12-9f12-3d1e525a8e84</example>
        [DataMember(Name = "required_notnullable_uuid", IsRequired = true, EmitDefaultValue = true)]
        public Guid RequiredNotnullableUuid { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNullableUuid
        /// </summary>
        /// <example>72f98069-206d-4f12-9f12-3d1e525a8e84</example>
        [DataMember(Name = "notrequired_nullable_uuid", EmitDefaultValue = true)]
        public Guid? NotrequiredNullableUuid { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNotnullableUuid
        /// </summary>
        /// <example>72f98069-206d-4f12-9f12-3d1e525a8e84</example>
        [DataMember(Name = "notrequired_notnullable_uuid", EmitDefaultValue = false)]
        public Guid NotrequiredNotnullableUuid { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNullableArrayOfString
        /// </summary>
        [DataMember(Name = "required_nullable_array_of_string", IsRequired = true, EmitDefaultValue = true)]
        public List<string> RequiredNullableArrayOfString { get; set; }

        /// <summary>
        /// Gets or Sets RequiredNotnullableArrayOfString
        /// </summary>
        [DataMember(Name = "required_notnullable_array_of_string", IsRequired = true, EmitDefaultValue = true)]
        public List<string> RequiredNotnullableArrayOfString { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNullableArrayOfString
        /// </summary>
        [DataMember(Name = "notrequired_nullable_array_of_string", EmitDefaultValue = true)]
        public List<string> NotrequiredNullableArrayOfString { get; set; }

        /// <summary>
        /// Gets or Sets NotrequiredNotnullableArrayOfString
        /// </summary>
        [DataMember(Name = "notrequired_notnullable_array_of_string", EmitDefaultValue = false)]
        public List<string> NotrequiredNotnullableArrayOfString { get; set; }

        /// <summary>
        /// Gets or Sets additional properties
        /// </summary>
        [JsonExtensionData]
        public IDictionary<string, object> AdditionalProperties { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class RequiredClass {\n");
            sb.Append("  RequiredNullableIntegerProp: ").Append(RequiredNullableIntegerProp).Append("\n");
            sb.Append("  RequiredNotnullableintegerProp: ").Append(RequiredNotnullableintegerProp).Append("\n");
            sb.Append("  NotRequiredNullableIntegerProp: ").Append(NotRequiredNullableIntegerProp).Append("\n");
            sb.Append("  NotRequiredNotnullableintegerProp: ").Append(NotRequiredNotnullableintegerProp).Append("\n");
            sb.Append("  RequiredNullableStringProp: ").Append(RequiredNullableStringProp).Append("\n");
            sb.Append("  RequiredNotnullableStringProp: ").Append(RequiredNotnullableStringProp).Append("\n");
            sb.Append("  NotrequiredNullableStringProp: ").Append(NotrequiredNullableStringProp).Append("\n");
            sb.Append("  NotrequiredNotnullableStringProp: ").Append(NotrequiredNotnullableStringProp).Append("\n");
            sb.Append("  RequiredNullableBooleanProp: ").Append(RequiredNullableBooleanProp).Append("\n");
            sb.Append("  RequiredNotnullableBooleanProp: ").Append(RequiredNotnullableBooleanProp).Append("\n");
            sb.Append("  NotrequiredNullableBooleanProp: ").Append(NotrequiredNullableBooleanProp).Append("\n");
            sb.Append("  NotrequiredNotnullableBooleanProp: ").Append(NotrequiredNotnullableBooleanProp).Append("\n");
            sb.Append("  RequiredNullableDateProp: ").Append(RequiredNullableDateProp).Append("\n");
            sb.Append("  RequiredNotNullableDateProp: ").Append(RequiredNotNullableDateProp).Append("\n");
            sb.Append("  NotRequiredNullableDateProp: ").Append(NotRequiredNullableDateProp).Append("\n");
            sb.Append("  NotRequiredNotnullableDateProp: ").Append(NotRequiredNotnullableDateProp).Append("\n");
            sb.Append("  RequiredNotnullableDatetimeProp: ").Append(RequiredNotnullableDatetimeProp).Append("\n");
            sb.Append("  RequiredNullableDatetimeProp: ").Append(RequiredNullableDatetimeProp).Append("\n");
            sb.Append("  NotrequiredNullableDatetimeProp: ").Append(NotrequiredNullableDatetimeProp).Append("\n");
            sb.Append("  NotrequiredNotnullableDatetimeProp: ").Append(NotrequiredNotnullableDatetimeProp).Append("\n");
            sb.Append("  RequiredNullableEnumInteger: ").Append(RequiredNullableEnumInteger).Append("\n");
            sb.Append("  RequiredNotnullableEnumInteger: ").Append(RequiredNotnullableEnumInteger).Append("\n");
            sb.Append("  NotrequiredNullableEnumInteger: ").Append(NotrequiredNullableEnumInteger).Append("\n");
            sb.Append("  NotrequiredNotnullableEnumInteger: ").Append(NotrequiredNotnullableEnumInteger).Append("\n");
            sb.Append("  RequiredNullableEnumIntegerOnly: ").Append(RequiredNullableEnumIntegerOnly).Append("\n");
            sb.Append("  RequiredNotnullableEnumIntegerOnly: ").Append(RequiredNotnullableEnumIntegerOnly).Append("\n");
            sb.Append("  NotrequiredNullableEnumIntegerOnly: ").Append(NotrequiredNullableEnumIntegerOnly).Append("\n");
            sb.Append("  NotrequiredNotnullableEnumIntegerOnly: ").Append(NotrequiredNotnullableEnumIntegerOnly).Append("\n");
            sb.Append("  RequiredNotnullableEnumString: ").Append(RequiredNotnullableEnumString).Append("\n");
            sb.Append("  RequiredNullableEnumString: ").Append(RequiredNullableEnumString).Append("\n");
            sb.Append("  NotrequiredNullableEnumString: ").Append(NotrequiredNullableEnumString).Append("\n");
            sb.Append("  NotrequiredNotnullableEnumString: ").Append(NotrequiredNotnullableEnumString).Append("\n");
            sb.Append("  RequiredNullableOuterEnumDefaultValue: ").Append(RequiredNullableOuterEnumDefaultValue).Append("\n");
            sb.Append("  RequiredNotnullableOuterEnumDefaultValue: ").Append(RequiredNotnullableOuterEnumDefaultValue).Append("\n");
            sb.Append("  NotrequiredNullableOuterEnumDefaultValue: ").Append(NotrequiredNullableOuterEnumDefaultValue).Append("\n");
            sb.Append("  NotrequiredNotnullableOuterEnumDefaultValue: ").Append(NotrequiredNotnullableOuterEnumDefaultValue).Append("\n");
            sb.Append("  RequiredNullableUuid: ").Append(RequiredNullableUuid).Append("\n");
            sb.Append("  RequiredNotnullableUuid: ").Append(RequiredNotnullableUuid).Append("\n");
            sb.Append("  NotrequiredNullableUuid: ").Append(NotrequiredNullableUuid).Append("\n");
            sb.Append("  NotrequiredNotnullableUuid: ").Append(NotrequiredNotnullableUuid).Append("\n");
            sb.Append("  RequiredNullableArrayOfString: ").Append(RequiredNullableArrayOfString).Append("\n");
            sb.Append("  RequiredNotnullableArrayOfString: ").Append(RequiredNotnullableArrayOfString).Append("\n");
            sb.Append("  NotrequiredNullableArrayOfString: ").Append(NotrequiredNullableArrayOfString).Append("\n");
            sb.Append("  NotrequiredNotnullableArrayOfString: ").Append(NotrequiredNotnullableArrayOfString).Append("\n");
            sb.Append("  AdditionalProperties: ").Append(AdditionalProperties).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return OpenAPIClientUtils.compareLogic.Compare(this, input as RequiredClass).AreEqual;
        }

        /// <summary>
        /// Returns true if RequiredClass instances are equal
        /// </summary>
        /// <param name="input">Instance of RequiredClass to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(RequiredClass input)
        {
            return OpenAPIClientUtils.compareLogic.Compare(this, input).AreEqual;
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.RequiredNullableIntegerProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNullableIntegerProp.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.RequiredNotnullableintegerProp.GetHashCode();
                if (this.NotRequiredNullableIntegerProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotRequiredNullableIntegerProp.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.NotRequiredNotnullableintegerProp.GetHashCode();
                if (this.RequiredNullableStringProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNullableStringProp.GetHashCode();
                }
                if (this.RequiredNotnullableStringProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNotnullableStringProp.GetHashCode();
                }
                if (this.NotrequiredNullableStringProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNullableStringProp.GetHashCode();
                }
                if (this.NotrequiredNotnullableStringProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNotnullableStringProp.GetHashCode();
                }
                if (this.RequiredNullableBooleanProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNullableBooleanProp.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.RequiredNotnullableBooleanProp.GetHashCode();
                if (this.NotrequiredNullableBooleanProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNullableBooleanProp.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.NotrequiredNotnullableBooleanProp.GetHashCode();
                if (this.RequiredNullableDateProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNullableDateProp.GetHashCode();
                }
                if (this.RequiredNotNullableDateProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNotNullableDateProp.GetHashCode();
                }
                if (this.NotRequiredNullableDateProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotRequiredNullableDateProp.GetHashCode();
                }
                if (this.NotRequiredNotnullableDateProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotRequiredNotnullableDateProp.GetHashCode();
                }
                if (this.RequiredNotnullableDatetimeProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNotnullableDatetimeProp.GetHashCode();
                }
                if (this.RequiredNullableDatetimeProp != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNullableDatetimeProp.GetHashCode();
                }
                if (this.NotrequiredNullableDatetimeProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNullableDatetimeProp.GetHashCode();
                }
                if (this.NotrequiredNotnullableDatetimeProp != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNotnullableDatetimeProp.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.RequiredNullableEnumInteger.GetHashCode();
                hashCode = (hashCode * 59) + this.RequiredNotnullableEnumInteger.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNullableEnumInteger.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNotnullableEnumInteger.GetHashCode();
                hashCode = (hashCode * 59) + this.RequiredNullableEnumIntegerOnly.GetHashCode();
                hashCode = (hashCode * 59) + this.RequiredNotnullableEnumIntegerOnly.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNullableEnumIntegerOnly.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNotnullableEnumIntegerOnly.GetHashCode();
                hashCode = (hashCode * 59) + this.RequiredNotnullableEnumString.GetHashCode();
                hashCode = (hashCode * 59) + this.RequiredNullableEnumString.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNullableEnumString.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNotnullableEnumString.GetHashCode();
                hashCode = (hashCode * 59) + this.RequiredNullableOuterEnumDefaultValue.GetHashCode();
                hashCode = (hashCode * 59) + this.RequiredNotnullableOuterEnumDefaultValue.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNullableOuterEnumDefaultValue.GetHashCode();
                hashCode = (hashCode * 59) + this.NotrequiredNotnullableOuterEnumDefaultValue.GetHashCode();
                if (this.RequiredNullableUuid != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNullableUuid.GetHashCode();
                }
                if (this.RequiredNotnullableUuid != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNotnullableUuid.GetHashCode();
                }
                if (this.NotrequiredNullableUuid != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNullableUuid.GetHashCode();
                }
                if (this.NotrequiredNotnullableUuid != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNotnullableUuid.GetHashCode();
                }
                if (this.RequiredNullableArrayOfString != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNullableArrayOfString.GetHashCode();
                }
                if (this.RequiredNotnullableArrayOfString != null)
                {
                    hashCode = (hashCode * 59) + this.RequiredNotnullableArrayOfString.GetHashCode();
                }
                if (this.NotrequiredNullableArrayOfString != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNullableArrayOfString.GetHashCode();
                }
                if (this.NotrequiredNotnullableArrayOfString != null)
                {
                    hashCode = (hashCode * 59) + this.NotrequiredNotnullableArrayOfString.GetHashCode();
                }
                if (this.AdditionalProperties != null)
                {
                    hashCode = (hashCode * 59) + this.AdditionalProperties.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
