/// <summary> /// Десериализация файла /// </summary> /// <param name="inputFilePath">Путь к JSON файлу</param> public static void DeserializeJsonFile(string inputFilePath) { // Если путь по умолчанию не найден... if (!File.Exists(inputFilePath)) { // Вывести сообщение MessageBox.Show("Входной файл не найден, укажите путь", "Файл не найден", MessageBoxButton.OK, MessageBoxImage.Warning); // Показать диалог открытия файла OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == true) { // Присвоить переменной новый путь inputFilePath = openFileDialog.FileName; } } // Открыть файл using (StreamReader sr = File.OpenText(inputFilePath)) { string line; // Присвоить к переменной line каждую строку, пока не достигнет конца файла while ((line = sr.ReadLine()) != null) { // К списку json данных добавляется элемент, если найдено начало данных if (line.Equals(startData)) { jsonDataSet.Add(null); } // Увеличить счетчик json данных если найден конец данных else if (line.Equals(endData)) { dataSetNum++; } // В остальных случаях добавить строку к к текущему элементу списка json данных, который определяется счетчиком else if (dataSetNum >= 0) { jsonDataSet[dataSetNum] += line; } } } // Для каждых json данных в списке данных.. foreach (string jsonData in jsonDataSet) { // Десериализовать тип данных DataType dt = JsonConvert.DeserializeObject <DataType>(jsonData); // Если тип "HOUSES", десериализовать json данные как набор данных домов if (dt.Q.Equals("HOUSES")) { HousesDataSet = JsonConvert.DeserializeObject <HousesDataSet>(jsonData); } // Если тип "USERS", десериализовать json данные как набор данных пользователей else if (dt.Q.Equals("USERS")) { UsersDataSet = JsonConvert.DeserializeObject <UsersDataSet>(jsonData); } } }
/// <summary> /// Конструктор модели представления /// </summary> public MainViewModel() { //Десериализация файла JSONData.DeserializeJsonFile(inputFilePath); housesDataSet = JSONData.HousesDataSet; usersDataSet = JSONData.UsersDataSet; //Создание команд NextHouseCommand = new Command(NextHouse); PrevHouseCommand = new Command(PrevHouse); NewHouseCommand = new Command(NewHouse); DeleteHouseCommand = new Command(DeleteHouse); NextUserCommand = new Command(NextUser); PrevUserCommand = new Command(PrevUser); NewUserCommand = new Command(NewUser); DeleteUserCommand = new Command(DeleteUser); DeletePhoneCommand = new Command <Phone>(ExecuteDeletePhoneCommand); AddPhoneCommand = new Command(AddPhone); SaveDataCommand = new Command(SaveAllData); // Если набор данных существует if (housesDataSet != null) { // Присваивание нулевых значений идекса currentHouseIndex = 0; // Определение не пуст ли набор данных HousesNotEmpty = housesDataSet.D.Items.Count != 0 ? true : false; // Если набор данных не пуст if (HousesNotEmpty) { // Показ первых элементов наборов данных ShowHouse(currentHouseIndex); } } // Иначе, присвоить текущему элементу пустое значение else { CurrentHouse = null; } // Если набор данных существует if (usersDataSet != null) { // Присваивание нулевых значений идекса currentUserIndex = 0; // Определение не пуст ли набор данных UsersNotEmpty = usersDataSet.D.Items.Count != 0 ? true : false; // Если набор данных не пуст if (UsersNotEmpty) { // Показ первых элементов наборов данных ShowUser(currentUserIndex); } } // Иначе, присвоить текущему элементу пустое значение else { CurrentUser = null; } }