/// <summary>
 /// Initializes a new instance of the <see cref="EdFiSchoolReadable" /> class.
 /// </summary>
 /// <param name="Id">Id (required).</param>
 /// <param name="Addresses">An unordered collection of educationOrganizationAddresses. The set of elements that describes the physical location of the education entity, including the street address, city, state, ZIP code, and ZIP code + 4. (required).</param>
 /// <param name="EducationOrganizationCategories">An unordered collection of educationOrganizationCategories. The classification of the education agency within the geographic boundaries of a state according to the level of administrative and operational control granted by the state. (required).</param>
 /// <param name="GradeLevels">An unordered collection of schoolGradeLevels. The grade levels served at the school. (required).</param>
 /// <param name="SchoolId">The identifier assigned to a school. (required).</param>
 /// <param name="LocalEducationAgencyReference">LocalEducationAgencyReference.</param>
 /// <param name="IdentificationCodes">An unordered collection of educationOrganizationIdentificationCodes. A unique number or alphanumeric code assigned to an education organization by a school, school system, a state, or other agency or entity..</param>
 /// <param name="InstitutionTelephones">An unordered collection of educationOrganizationInstitutionTelephones. The 10-digit telephone number, including the area code, for the education entity..</param>
 /// <param name="NameOfInstitution">The full, legally accepted name of the institution. (required).</param>
 /// <param name="SchoolCategories">An unordered collection of schoolCategories. The one or more categories of school. For example: High School, Middle School, and/or Elementary School..</param>
 /// <param name="TitleIPartASchoolDesignationDescriptor">Denotes the Title I Part A designation for the school..</param>
 /// <param name="Etag">A unique system-generated value that identifies the version of the resource..</param>
 /// <param name="Ext">Ext.</param>
 public EdFiSchoolReadable(string Id = default(string), List <EdFiEducationOrganizationAddressSchoolReadable> Addresses = default(List <EdFiEducationOrganizationAddressSchoolReadable>), List <EdFiEducationOrganizationCategorySchoolReadable> EducationOrganizationCategories = default(List <EdFiEducationOrganizationCategorySchoolReadable>), List <EdFiSchoolGradeLevelReadable> GradeLevels = default(List <EdFiSchoolGradeLevelReadable>), int?SchoolId = default(int?), EdFiLocalEducationAgencyReference LocalEducationAgencyReference = default(EdFiLocalEducationAgencyReference), List <EdFiEducationOrganizationIdentificationCodeSchoolReadable> IdentificationCodes = default(List <EdFiEducationOrganizationIdentificationCodeSchoolReadable>), List <EdFiEducationOrganizationInstitutionTelephoneSchoolReadable> InstitutionTelephones = default(List <EdFiEducationOrganizationInstitutionTelephoneSchoolReadable>), string NameOfInstitution = default(string), List <EdFiSchoolCategoryReadable> SchoolCategories = default(List <EdFiSchoolCategoryReadable>), string TitleIPartASchoolDesignationDescriptor = default(string), string Etag = default(string), SchoolExtensionsReadable Ext = default(SchoolExtensionsReadable))
 {
     // to ensure "Id" is required (not null)
     if (Id == null)
     {
         throw new InvalidDataException("Id is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.Id = Id;
     }
     // to ensure "Addresses" is required (not null)
     if (Addresses == null)
     {
         throw new InvalidDataException("Addresses is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.Addresses = Addresses;
     }
     // to ensure "EducationOrganizationCategories" is required (not null)
     if (EducationOrganizationCategories == null)
     {
         throw new InvalidDataException("EducationOrganizationCategories is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.EducationOrganizationCategories = EducationOrganizationCategories;
     }
     // to ensure "GradeLevels" is required (not null)
     if (GradeLevels == null)
     {
         throw new InvalidDataException("GradeLevels is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.GradeLevels = GradeLevels;
     }
     // to ensure "SchoolId" is required (not null)
     if (SchoolId == null)
     {
         throw new InvalidDataException("SchoolId is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.SchoolId = SchoolId;
     }
     // to ensure "NameOfInstitution" is required (not null)
     if (NameOfInstitution == null)
     {
         throw new InvalidDataException("NameOfInstitution is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.NameOfInstitution = NameOfInstitution;
     }
     this.LocalEducationAgencyReference = LocalEducationAgencyReference;
     this.IdentificationCodes           = IdentificationCodes;
     this.InstitutionTelephones         = InstitutionTelephones;
     this.SchoolCategories = SchoolCategories;
     this.TitleIPartASchoolDesignationDescriptor = TitleIPartASchoolDesignationDescriptor;
     this.Etag = Etag;
     this.Ext  = Ext;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="EdFiSchoolReadable" /> class.
 /// </summary>
 /// <param name="id">id.</param>
 /// <param name="educationOrganizationCategories">An unordered collection of educationOrganizationCategories. The classification of the education agency within the geographic boundaries of a state according to the level of administrative and operational control granted by the state. (required).</param>
 /// <param name="gradeLevels">An unordered collection of schoolGradeLevels. The grade levels served at the school. (required).</param>
 /// <param name="schoolId">The identifier assigned to a school. (required).</param>
 /// <param name="localEducationAgencyReference">localEducationAgencyReference.</param>
 /// <param name="addresses">An unordered collection of educationOrganizationAddresses. The set of elements that describes an address for the education entity, including the street address, city, state, ZIP code, and ZIP code + 4..</param>
 /// <param name="identificationCodes">An unordered collection of educationOrganizationIdentificationCodes. A unique number or alphanumeric code assigned to an education organization by a school, school system, a state, or other agency or entity..</param>
 /// <param name="institutionTelephones">An unordered collection of educationOrganizationInstitutionTelephones. The 10-digit telephone number, including the area code, for the education entity..</param>
 /// <param name="nameOfInstitution">The full, legally accepted name of the institution. (required).</param>
 /// <param name="schoolCategories">An unordered collection of schoolCategories. The one or more categories of school. For example: High School, Middle School, and/or Elementary School..</param>
 /// <param name="titleIPartASchoolDesignationDescriptor">Denotes the Title I Part A designation for the school..</param>
 /// <param name="etag">A unique system-generated value that identifies the version of the resource..</param>
 /// <param name="ext">ext.</param>
 public EdFiSchoolReadable(string id = default(string), List <EdFiEducationOrganizationCategorySchoolReadable> educationOrganizationCategories = default(List <EdFiEducationOrganizationCategorySchoolReadable>), List <EdFiSchoolGradeLevelReadable> gradeLevels = default(List <EdFiSchoolGradeLevelReadable>), int?schoolId = default(int?), EdFiLocalEducationAgencyReference localEducationAgencyReference = default(EdFiLocalEducationAgencyReference), List <EdFiEducationOrganizationAddressSchoolReadable> addresses = default(List <EdFiEducationOrganizationAddressSchoolReadable>), List <EdFiEducationOrganizationIdentificationCodeSchoolReadable> identificationCodes = default(List <EdFiEducationOrganizationIdentificationCodeSchoolReadable>), List <EdFiEducationOrganizationInstitutionTelephoneSchoolReadable> institutionTelephones = default(List <EdFiEducationOrganizationInstitutionTelephoneSchoolReadable>), string nameOfInstitution = default(string), List <EdFiSchoolCategoryReadable> schoolCategories = default(List <EdFiSchoolCategoryReadable>), string titleIPartASchoolDesignationDescriptor = default(string), string etag = default(string), SchoolExtensionsReadable ext = default(SchoolExtensionsReadable))
 {
     // to ensure "educationOrganizationCategories" is required (not null)
     if (educationOrganizationCategories == null)
     {
         throw new InvalidDataException("educationOrganizationCategories is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.EducationOrganizationCategories = educationOrganizationCategories;
     }
     // to ensure "gradeLevels" is required (not null)
     if (gradeLevels == null)
     {
         throw new InvalidDataException("gradeLevels is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.GradeLevels = gradeLevels;
     }
     // to ensure "schoolId" is required (not null)
     if (schoolId == null)
     {
         throw new InvalidDataException("schoolId is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.SchoolId = schoolId;
     }
     // to ensure "nameOfInstitution" is required (not null)
     if (nameOfInstitution == null)
     {
         throw new InvalidDataException("nameOfInstitution is a required property for EdFiSchoolReadable and cannot be null");
     }
     else
     {
         this.NameOfInstitution = nameOfInstitution;
     }
     this.Id = id;
     this.LocalEducationAgencyReference = localEducationAgencyReference;
     this.Addresses             = addresses;
     this.IdentificationCodes   = identificationCodes;
     this.InstitutionTelephones = institutionTelephones;
     this.SchoolCategories      = schoolCategories;
     this.TitleIPartASchoolDesignationDescriptor = titleIPartASchoolDesignationDescriptor;
     this.Etag = etag;
     this.Ext  = ext;
 }