private void ButtonDownloadDeserializedObjects_Click(object sender, EventArgs e) { if (OpenFileDialog.ShowDialog() == DialogResult.OK) { string fileName = OpenFileDialog.FileName; string serializedObjects = File.ReadAllText(OpenFileDialog.FileName); for (int i = 0; i < ComboBoxCoders.Items.Count; i++) { ICodingPlugin plugin = (ICodingPlugin)ComboBoxCoders.Items[i]; if (plugin.Extension == fileName.Substring(fileName.LastIndexOf("."))) { serializedObjects = Encoding.UTF8.GetString(plugin.Decode(serializedObjects)); fileName = fileName.Substring(0, fileName.LastIndexOf(".")); } } for (int i = 0; i < ComboBoxSerializers.Items.Count; i++) { SerializerFactory factory = (SerializerFactory)ComboBoxSerializers.Items[i]; if (factory.Extension == fileName.Substring(fileName.LastIndexOf("."))) { ISerializer serializer = factory.CreateSerializer(); applicationDataContext.Objects = serializer.Deserialize(serializedObjects); applicationDataContext.ComboBoxObjectsRefresh(); return; } } MessageBox.Show("Сериализатора или плагина с таким расширением не найдено("); } }
public void RefreshPlugins() { DirectoryInfo pluginDirectory = new DirectoryInfo(pluginPath); if (!pluginDirectory.Exists) { pluginDirectory.Create(); } string[] pluginFiles = Directory.GetFiles(pluginPath, "*.dll"); foreach (var file in pluginFiles) { Assembly asm = Assembly.LoadFrom(file); IEnumerable <ICodingPlugin> types = asm.GetTypes(). Where(t => t.GetInterface(nameof(ICodingPlugin)) != null) .Select(x => Activator.CreateInstance(x)) .Cast <ICodingPlugin>(); //Where(i => i.FullName == typeof(ICodingPlugin).FullName).Any()); foreach (var type in types) { ICodingPlugin plugin = asm.CreateInstance(type.FullName) as ICodingPlugin; plugins.Add(plugin); } } }
private void ButtonSaveSerializedObjects_Click(object sender, EventArgs e) { if (SaveFileDialog.ShowDialog() == DialogResult.OK) { string fileName = SaveFileDialog.FileName; SerializerFactory factory = (SerializerFactory)ComboBoxSerializers.SelectedItem; ISerializer serializer = factory.CreateSerializer(); string serializedObjects = serializer.Serialize(applicationDataContext.Objects); fileName += factory.Extension; if (CheckBoxCoder.Checked) { ICodingPlugin plugin = (ICodingPlugin)ComboBoxCoders.SelectedItem; serializedObjects = plugin.Code(Encoding.UTF8.GetBytes(serializedObjects)); fileName += plugin.Extension; } File.WriteAllText(SaveFileDialog.FileName, serializedObjects); File.Move(SaveFileDialog.FileName, fileName); } }