static void Main()
        {
            List <Empresa> empresas = new List <Empresa>();
            Persona        personal;
            Persona        persona;
            Departamento   departamento;
            Empresa        newempresa;
            Seccion        seccion;
            List <Persona> personales;
            Bloque         bloque;
            string         name;
            string         lastname;
            int            rut;
            string         position;

            string switcher = "0";
            string stopper  = "3";


            while (switcher != stopper)
            {
                Console.WriteLine("-----------------------------------------Bienvenidos-----------------------------------------");
                Console.WriteLine("Si desea:\n\t(1) Utilizar un archivo para cargar la información de la empresa\n\t(2) No utilizar un archivo para cargar la información de la empresa\n\t(3) Salir del programa\n");
                switcher = Console.ReadLine();
                Console.Clear();
                switch (switcher)
                {
                case "1":
                    try
                    {
                        empresas = LoadEmpresa();
                        int ne = 1;
                        foreach (Empresa e in empresas)
                        {
                            Console.WriteLine($"-----------------------------------------EMPRESA {ne}-----------------------------------------");
                            Console.WriteLine($"Nombre empresa: {e.Name}\nRut empresa: {e.Rut}\n\n\n");
                            foreach (Division d in e.Divisiones)
                            {
                                if (d.Name == "Area")
                                {
                                    Console.WriteLine($"Nombre división: {d.Name}\nNombre encargado: {d.InCharge.Name} {d.InCharge.Lastname}\n");
                                    Console.WriteLine("");
                                    Console.WriteLine("");
                                    foreach (Departamento dep in d.Departamentos)
                                    {
                                        Console.WriteLine($"Nombre división: {dep.Name}\nNombre encargado: {dep.InCharge.Name} {dep.InCharge.Lastname}\n");
                                        Console.WriteLine("");
                                        Console.WriteLine("");
                                        foreach (Seccion s in dep.Secciones)
                                        {
                                            Console.WriteLine($"Nombre división: {s.Name}\nNombre encargado: {s.InCharge.Name} {s.InCharge.Lastname}\n");
                                            Console.WriteLine("");
                                            Console.WriteLine("");
                                            int nb = 1;
                                            foreach (Bloque b in s.Bloques)
                                            {
                                                int nem = 1;
                                                Console.WriteLine($"Nombre división: {b.Name} {nb}\nNombre encargado: {b.InCharge.Name} {b.InCharge.Lastname}\n");
                                                foreach (Persona p in b.Personas)
                                                {
                                                    Console.WriteLine($"Nombre empleado {nem}: {p.Name}\nApellido empleado: {p.Lastname}\nRut empleado: {p.Rut}\nCargo empleado: {p.Position}\n");
                                                    nem++;
                                                }
                                                Console.WriteLine("");
                                                Console.WriteLine("");

                                                nb++;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    Console.WriteLine($"Nombre división: {d.Name}\nNombre encargado: {d.InCharge.Name} {d.InCharge.Lastname}\n");
                                    Console.WriteLine("");
                                    Console.WriteLine("");

                                    foreach (Seccion s in d.Secciones)
                                    {
                                        Console.WriteLine($"Nombre división: {s.Name}\nNombre encargado: {s.InCharge.Name} {s.InCharge.Lastname}\n");
                                        Console.WriteLine("");
                                        Console.WriteLine("");
                                        int nb = 1;
                                        foreach (Bloque b in s.Bloques)
                                        {
                                            int nem = 1;
                                            Console.WriteLine($"Nombre división: {b.Name} {nb}\nNombre encargado: {b.InCharge.Name} {b.InCharge.Lastname}\n");
                                            foreach (Persona p in b.Personas)
                                            {
                                                Console.WriteLine($"Nombre empleado {nem}: {p.Name}\nApellido empleado: {p.Lastname}\nRut empleado: {p.Rut}\nCargo empleado: {p.Position}\n");
                                                nem++;
                                            }
                                            Console.WriteLine("");
                                            Console.WriteLine("");

                                            nb++;
                                        }
                                    }
                                }
                            }
                            Console.ReadKey();
                            Console.Clear();
                            ne++;
                        }
                    }
                    catch (FileNotFoundException)
                    {
                        Console.WriteLine("------------------------------------No se ha encontrado el archivo de la empresa------------------------------------ ");
                        Console.WriteLine("Ingrese el nombre de la empresa:");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut de la empresa (Sin puntos ni guiones):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        newempresa = new Empresa(name, rut);
                        Thread.Sleep(1000);
                        Console.Clear();



                        Console.WriteLine("Ingrese el nombre del encargado de departamento: ");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del encargado de departamento: ");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del encargado de departamento (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        position     = "Jefe departamento";
                        persona      = new Persona(name, lastname, rut, position);
                        departamento = new Departamento(persona);
                        Thread.Sleep(1000);
                        Console.Clear();



                        Console.WriteLine("Ingrese el nombre del encargado de sección: ");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del encargado de sección: ");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del encargado de sección (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        position = "Jefe sección";
                        persona  = new Persona(name, lastname, rut, position);
                        seccion  = new Seccion(persona);
                        departamento.Secciones.Add(seccion);
                        Thread.Sleep(1000);
                        Console.Clear();

                        Console.WriteLine("Ingrese el nombre del encargado de bloque 1: ");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del encargado de bloque 1: ");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del encargado de bloque 1 (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        position = "Jefe bloque 1";

                        persona = new Persona(name, lastname, rut, position);

                        personales = new List <Persona>();
                        Console.WriteLine("");

                        Console.WriteLine("Ingrese el nombre del personal 1:");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del personal 1:");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del personal 1 (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        Console.WriteLine("Ingrese el cargo del personal 1:");
                        position = Console.ReadLine();

                        personal = new Persona(name, lastname, rut, position);
                        personales.Add(personal);
                        Console.WriteLine("");


                        Console.WriteLine("Ingrese el nombre del personal 2:");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del personal 2:");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del personal 2 (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        Console.WriteLine("Ingrese el cargo del personal 2:");
                        position = Console.ReadLine();

                        personal = new Persona(name, lastname, rut, position);
                        personales.Add(personal);

                        bloque = new Bloque(persona, personales);
                        seccion.Bloques.Add(bloque);
                        Thread.Sleep(1000);
                        Console.Clear();

                        Console.WriteLine("Ingrese el nombre del encargado de bloque 2: ");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del encargado de bloque 2: ");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del encargado de bloque 2 (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        position = "Jefe bloque 2";

                        persona = new Persona(name, lastname, rut, position);
                        Console.WriteLine("");


                        personales = new List <Persona>();

                        Console.WriteLine("Ingrese el nombre del personal 1:");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del personal 1:");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del personal 1 (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        Console.WriteLine("Ingrese el cargo del personal 1:");
                        position = Console.ReadLine();

                        personal = new Persona(name, lastname, rut, position);
                        personales.Add(personal);
                        Console.WriteLine("");

                        Console.WriteLine("Ingrese el nombre del personal 2:");
                        name = Console.ReadLine();
                        Console.WriteLine("Ingrese el apellido del personal 2:");
                        lastname = Console.ReadLine();
                        Console.WriteLine("Ingrese el rut del personal 2 (Sin guiones ni puntos. Reemplace la k por un 0):");
                        rut = -1;
                        while (rut == -1)
                        {
                            try
                            {
                                rut = int.Parse(Console.ReadLine());
                                if (rut < 1)
                                {
                                    Console.WriteLine("Ingrese un rut válido:");
                                    rut = -1;
                                }
                            }
                            catch (FormatException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                            }
                            catch (OverflowException)
                            {
                                Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                            }
                        }
                        Console.WriteLine("Ingrese el cargo del personal 2:");
                        position = Console.ReadLine();

                        personal = new Persona(name, lastname, rut, position);
                        personales.Add(personal);

                        bloque = new Bloque(persona, personales);
                        seccion.Bloques.Add(bloque);


                        newempresa.Divisiones.Add(departamento);

                        empresas.Add(newempresa);
                        SaveEmpresa(empresas);
                        empresas = new List <Empresa>();
                        Thread.Sleep(1000);
                        Console.Clear();
                    }

                    break;

                case "2":
                    Console.WriteLine("Ingrese el nombre de la empresa:");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut de la empresa (Sin puntos ni guiones):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    newempresa = new Empresa(name, rut);
                    Thread.Sleep(1000);
                    Console.Clear();


                    Console.WriteLine("Ingrese el nombre del encargado de departamento: ");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del encargado de departamento: ");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del encargado de departamento (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    position     = "Jefe departamento";
                    persona      = new Persona(name, lastname, rut, position);
                    departamento = new Departamento(persona);
                    Thread.Sleep(1000);
                    Console.Clear();



                    Console.WriteLine("Ingrese el nombre del encargado de sección: ");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del encargado de sección: ");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del encargado de sección (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    position = "Jefe sección";
                    persona  = new Persona(name, lastname, rut, position);
                    seccion  = new Seccion(persona);
                    departamento.Secciones.Add(seccion);
                    Thread.Sleep(1000);
                    Console.Clear();

                    Console.WriteLine("Ingrese el nombre del encargado de bloque 1: ");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del encargado de bloque 1: ");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del encargado de bloque 1 (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    position = "Jefe bloque 1";

                    persona = new Persona(name, lastname, rut, position);

                    personales = new List <Persona>();
                    Console.WriteLine("");

                    Console.WriteLine("Ingrese el nombre del personal 1:");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del personal 1:");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del personal 1 (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    Console.WriteLine("Ingrese el cargo del personal 1:");
                    position = Console.ReadLine();

                    personal = new Persona(name, lastname, rut, position);
                    personales.Add(personal);
                    Console.WriteLine("");


                    Console.WriteLine("Ingrese el nombre del personal 2:");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del personal 2:");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del personal 2 (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    Console.WriteLine("Ingrese el cargo del personal 2:");
                    position = Console.ReadLine();

                    personal = new Persona(name, lastname, rut, position);
                    personales.Add(personal);

                    bloque = new Bloque(persona, personales);
                    seccion.Bloques.Add(bloque);
                    Thread.Sleep(1000);
                    Console.Clear();

                    Console.WriteLine("Ingrese el nombre del encargado de bloque 2: ");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del encargado de bloque 2: ");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del encargado de bloque 2 (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    position = "Jefe bloque 2";

                    persona = new Persona(name, lastname, rut, position);
                    Console.WriteLine("");


                    personales = new List <Persona>();

                    Console.WriteLine("Ingrese el nombre del personal 1:");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del personal 1:");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del personal 1 (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    Console.WriteLine("Ingrese el cargo del personal 1:");
                    position = Console.ReadLine();

                    personal = new Persona(name, lastname, rut, position);
                    personales.Add(personal);
                    Console.WriteLine("");

                    Console.WriteLine("Ingrese el nombre del personal 2:");
                    name = Console.ReadLine();
                    Console.WriteLine("Ingrese el apellido del personal 2:");
                    lastname = Console.ReadLine();
                    Console.WriteLine("Ingrese el rut del personal 2 (Sin guiones ni puntos. Reemplace la k por un 0):");
                    rut = -1;
                    while (rut == -1)
                    {
                        try
                        {
                            rut = int.Parse(Console.ReadLine());
                            if (rut < 1)
                            {
                                Console.WriteLine("Ingrese un rut válido:");
                                rut = -1;
                            }
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un numero como rut:");
                        }
                        catch (OverflowException)
                        {
                            Console.WriteLine("Formato invalido\nIngrese un rut de menos dígitos:");
                        }
                    }
                    Console.WriteLine("Ingrese el cargo del personal 2:");
                    position = Console.ReadLine();

                    personal = new Persona(name, lastname, rut, position);
                    personales.Add(personal);

                    bloque = new Bloque(persona, personales);
                    seccion.Bloques.Add(bloque);


                    newempresa.Divisiones.Add(departamento);

                    empresas.Add(newempresa);
                    SaveEmpresa(empresas);
                    empresas = new List <Empresa>();
                    Thread.Sleep(1000);
                    Console.Clear();
                    break;

                case "3":
                    if (empresas.Count() != 0)
                    {
                        SaveEmpresa(empresas);
                        Thread.Sleep(1000);
                    }
                    switcher = "3";
                    Thread.Sleep(1000);
                    break;

                default:
                    Console.WriteLine("Ingrese una opción valida\n");
                    Thread.Sleep(1000);
                    Console.Clear();
                    break;
                }
            }
        }