Exemplo n.º 1
0
        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");
                }
            }));
        }
Exemplo n.º 2
0
        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));
        }