/// <summary> /// コンストラクタ /// </summary> /// <param name="settings">設定インスタンス</param> /// <param name="settingsFile">設定を保存するファイル名</param> /// <param name="saveDelay">保存ディレイを(ミリ秒単位)</param> public SettingsAutoSaver( SettingsImpl settings, string settingsFile, ICSLogger logger, int saveDelay = 300) { if (settings == null) { throw new ArgumentNullException("settigns"); } if (settingsFile == null) { throw new ArgumentNullException("settingsFile"); } if (logger == null) { throw new ArgumentNullException("logger"); } if (saveDelay < 0) { throw new ArgumentOutOfRangeException("saveDelay", "saveDelayは0以上の整数である必要があります。"); } Logger = logger; SaveDelay = saveDelay; SettingsFile = settingsFile; SettingsTempFile = SettingsFile + ".temp"; Settings = settings; IsMonitoring = false; }
public void Serialize(System.IO.Stream stream, SettingsImpl settings) { var serializationInfoArray = settings.SettingsData.Select(x => SerializeSerializaeInfo(x.Key, x.Value, settings.KnownTypes)).ToArray(); DataContractSerializer serializer = new DataContractSerializer(typeof(KeyValueSerializationInfo[])); serializer.WriteObject(stream, serializationInfoArray); }
public ICSSettings GetChildSettings(string tag, IEnumerable <Type> knownTypes) { if (settingsChildren_.ContainsKey(tag)) { return(settingsChildren_[tag]); } else { var settings = new SettingsImpl(this, tag, knownTypes, Dispatcher); // 設定をロード var setTag = GetTaggedKey(settings.Tag, true); var setStr = Get <string>(setTag, null); if (setStr != null) { using (var ms = new MemoryStream()) using (var writer = new StreamWriter(ms)) { writer.Write(setStr); writer.Flush(); ms.Seek(0, SeekOrigin.Begin); childSettingsSerializer_.Deserialize(ms, settings); } } // 子設定に追加 settings.PropertyChanged += settings_PropertyChanged; settingsChildren_[settings.Tag] = settings; return(settings); } }
public void Deserialize(System.IO.Stream stream, SettingsImpl settings) { DataContractSerializer serializer = new DataContractSerializer(typeof(KeyValueSerializationInfo[])); var serializationInfoArray = (KeyValueSerializationInfo[])serializer.ReadObject(stream); var deserialized = serializationInfoArray.Select(x => new { Key = x.Key, Value = DeserializSeserializeInfo(x, settings.KnownTypes) }); settings.Clear(); foreach (var des in deserialized) { settings.Set(des.Key, des.Value); } }
protected SettingsImpl(SettingsImpl parentSettings, string tag, IEnumerable <Type> knownTypes, ICSActionDispatcher dispatcher = null) : this(tag, knownTypes, dispatcher) { if (parentSettings == null) { throw new ArgumentNullException("parentSettings"); } ParentSettings = parentSettings; // タグ編集 List <string> tags = new List <string>(); var settings = this; while (settings != null) { tags.Add(settings.Tag); settings = settings.ParentSettings; } tags.Reverse(); Tag = string.Join("_", tags); }