private static TSettings deserialize <TSettings>(string filename, SettingsSerializer serializer) where TSettings : SettingsBase, new() { return(Ut.WaitSharingVio(maximum: TimeSpan.FromSeconds(5), func: () => { switch (serializer) { case SettingsSerializer.ClassifyXml: return ClassifyXml.DeserializeFile <TSettings>(filename); case SettingsSerializer.ClassifyJson: return ClassifyJson.DeserializeFile <TSettings>(filename); case SettingsSerializer.ClassifyBinary: return ClassifyBinary.DeserializeFile <TSettings>(filename); case SettingsSerializer.DotNetBinary: var bf = new BinaryFormatter(); using (var fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) return (TSettings)bf.Deserialize(fs); default: throw new InternalErrorException("6843184"); } })); }
internal static void serialize(object settings, Type settingsType, string filename, SettingsSerializer serializer) { var tempname = filename + ".~tmp"; Ut.WaitSharingVio(() => { switch (serializer) { case SettingsSerializer.ClassifyXml: // SerializeToFile automatically creates the folder if necessary ClassifyXml.SerializeToFile(settingsType, settings, tempname, format: ClassifyXmlFormat.Create("Settings")); break; case SettingsSerializer.ClassifyJson: // SerializeToFile automatically creates the folder if necessary ClassifyJson.SerializeToFile(settingsType, settings, tempname); break; case SettingsSerializer.ClassifyBinary: // SerializeToFile automatically creates the folder if necessary ClassifyBinary.SerializeToFile(settingsType, settings, tempname); break; case SettingsSerializer.DotNetBinary: PathUtil.CreatePathToFile(tempname); var bf = new BinaryFormatter(); using (var fs = File.Open(tempname, FileMode.Create, FileAccess.Write, FileShare.Read)) bf.Serialize(fs, settings); break; default: throw new InternalErrorException("4968453"); } File.Delete(filename); File.Move(tempname, filename); }, TimeSpan.FromSeconds(5)); }