/// <summary> /// Заполнить коллекцию DeviceDetails дессериализуя класс PartDevices, /// содержащий словари измеренных, настроечных и расчётных параметров /// </summary> /// <param name="path">Путь к библиотеке расчётной части Dll</param> public virtual void PopulateDeviceDetails(string path) { // проверить FileName аргумент. if (path == null || path.Length == 0) { throw new ArgumentNullException($"Проверка параметра файл для всех устройств, метод: {nameof(PopulateDeviceDetails)}, причина: отсутствует аргумент <{path}>"); } // проверить существование файла. FileInfo fInfo = new FileInfo(path); if (!fInfo.Exists) { // вызвать исключение при отсутствии //Throw New FileNotFoundException($"Проверка файла для расчётной части: {Name}, метод: {NameOf(PopulateDeviceDetails)}, причина: файл <{path}> не найден") PartDevices emptyParameters = new PartDevices(); // серелизация JSON в строку, а затем запись строки в файл File.WriteAllText(path, JsonConvert.SerializeObject(emptyParameters, Formatting.Indented)); } else { PartDevices allBRS1Ms = JsonConvert.DeserializeObject <PartDevices>(File.ReadAllText(path)); foreach (DeviceBRS1M itemBRS1M in allBRS1Ms.All_BRS_1M.Values) { devices.Add(itemBRS1M); } } puthPartSetting = path; }
/// <summary> /// Сохранить все устройства в конфигурации /// </summary> public virtual void SaveDeviceDetails() { Dictionary <string, DeviceBRS1M> BRS1Ms = new Dictionary <string, DeviceBRS1M>(); bool needToSave = false; // просмотреть список параметров и добавить в специализированные коллекции foreach (DeviceDetail device in devices) { if (device.IsDirty) { needToSave = true; break; } } if (IsDirty || needToSave) { // просмотреть список параметров и добавить в специализированные коллекции // если имя параметра было оставлено пользователем по умолчанию, // то его во избежание коллизии уникальности переназначить имя как Guid foreach (DeviceDetail device in devices) { DeviceBRS1M tuningParameter = device as DeviceBRS1M; if (tuningParameter != null) { if (tuningParameter.ParameterName == USER_TEXT_CONTROL_BAROMETER || BRS1Ms.ContainsKey(tuningParameter.ParameterName)) { tuningParameter.ParameterName = Guid.NewGuid().ToString(); } BRS1Ms.Add(tuningParameter.ParameterName, tuningParameter); } } PartDevices allBRS1Ms = new PartDevices(BRS1Ms); // серелизация JSON в строку, а затем запись строки в файл File.WriteAllText(puthPartSetting, JsonConvert.SerializeObject(allBRS1Ms, Formatting.Indented)); // сбросить флаг IsDirty после сохранения изменений IsDirty = false; foreach (DeviceDetail device in devices) { device.IsDirty = false; } } }
//private const string partBarometersSetting = "D:\\PartParametersString.json"; private void TestDictionarySerialize() { Dictionary <string, DeviceBRS1M> deviceBRS1Ms = new Dictionary <string, DeviceBRS1M>(); DeviceBRS1M d1 = new DeviceBRS1M { ParameterName = "Name Registration1", PortName = "COM3", Parity = Parity.None, StopBits = StopBits.One, DataBits = 8, BaudRate = 1200, ClearOnOpen = false, ClearWithDTR = false, CurrentDataMode = DataMode.Hex, UnitInput = UnitOfMeasureInput.гПаВх, UnitOutput = UnitOfMeasureOutput.гПаВых }; DeviceBRS1M d2 = new DeviceBRS1M { ParameterName = "Name Registration2", PortName = "COM3", Parity = Parity.None, StopBits = StopBits.One, DataBits = 8, BaudRate = 1200, ClearOnOpen = false, ClearWithDTR = false, CurrentDataMode = DataMode.Hex, UnitInput = UnitOfMeasureInput.гПаВх, UnitOutput = UnitOfMeasureOutput.гПаВых }; deviceBRS1Ms.Add(d1.ParameterName, d1); deviceBRS1Ms.Add(d2.ParameterName, d2); PartDevices allParameters = new PartDevices { All_BRS_1M = deviceBRS1Ms }; json = JsonConvert.SerializeObject(allParameters, Formatting.Indented); //json = JsonConvert.SerializeObject(calculated) //Console.WriteLine(json) // серелизация JSON в строку, а затем запись строки в файл File.WriteAllText(partBarometersSetting, JsonConvert.SerializeObject(allParameters, Formatting.Indented)); }
private void TestDictionaryDeserialize() { // чтение файла в строку и десериализация JSON в Type PartDevices allParameters = JsonConvert.DeserializeObject <PartDevices>(File.ReadAllText(partBarometersSetting)); if (allParameters.All_BRS_1M != null) { int I = 1; if (allParameters.All_BRS_1M.Count > 0) { foreach (KeyValuePair <string, DeviceBRS1M> itemBRS1M in allParameters.All_BRS_1M) { Console.WriteLine(allParameters.All_BRS_1M["Name Registration" + I].ParameterName); Console.WriteLine(itemBRS1M.Value.ParameterName); I += 1; } } } }