Esempio n. 1
0
        /// <summary>
        ///   Serialize public properties of a Settings object to a given xml file
        /// </summary>
        /// <param name = "obj">Setting Object to serialize</param>
        /// <param name = "fileName">Xml file name</param>
        public static void Serialize(object obj)
        {
            string         fileName      = "";
            INamedSettings namedSettings = obj as INamedSettings;

            if (namedSettings != null)
            {
                fileName = obj + "." + namedSettings.Name + ".xml";
            }
            else
            {
                fileName = obj + ".xml";
            }
            NLog.Logger log = ServiceScope.Get <ILogger>().GetLogger;
            log.Trace("Serialize({0},{1})", obj.ToString(), fileName);
            Dictionary <string, string> globalSettingsList = new Dictionary <string, string>();
            Dictionary <string, string> userSettingsList   = new Dictionary <string, string>();
            XmlSettingsProvider         xmlWriter          = new XmlSettingsProvider(fileName);
            string fullFileName = String.Format(@"{0}\{1}", Options.ConfigDir, fileName);

            ;

            bool isFirstSave = (!File.Exists(fullFileName));

            foreach (PropertyInfo property in obj.GetType().GetProperties())
            {
                Type   thisType   = property.PropertyType;
                string defaultval = "";

                #region CLR Typed property

                if (isCLRType(thisType))
                {
                    object[]     attributes = property.GetCustomAttributes(typeof(SettingAttribute), false);
                    SettingScope scope      = SettingScope.Global;
                    if (attributes.Length != 0)
                    {
                        SettingAttribute attribute = (SettingAttribute)attributes[0];
                        scope      = attribute.SettingScope;
                        defaultval = attribute.DefaultValue;
                    }
                    else
                    {
                        scope      = SettingScope.Global;
                        defaultval = "";
                    }
                    string value = defaultval;

                    if (!isFirstSave) //else default value will be used if it exists
                    {
                        if (obj.GetType().GetProperty(property.Name).GetValue(obj, null) != null)
                        {
                            value = obj.GetType().GetProperty(property.Name).GetValue(obj, null).ToString();
                        }
                        if (scope == SettingScope.User)
                        {
                            userSettingsList.Add(property.Name, value);
                        }
                        else
                        {
                            globalSettingsList.Add(property.Name, value);
                        }
                    }
                    else
                    {
                        if (scope == SettingScope.Global)
                        {
                            globalSettingsList.Add(property.Name, value);
                        }
                        if (scope == SettingScope.User)
                        {
                            userSettingsList.Add(property.Name, value);
                        }
                    }
                }
                #endregion

                #region not CLR Typed property

                else
                {
                    XmlSerializer xmlSerial = new XmlSerializer(thisType);
                    StringBuilder sb        = new StringBuilder();
                    StringWriter  strWriter = new StringWriter(sb);
                    XmlTextWriter writer    = new XmlNoNamespaceWriter(strWriter);
                    writer.Formatting = Formatting.Indented;
                    object propertyValue = obj.GetType().GetProperty(property.Name).GetValue(obj, null);
                    xmlSerial.Serialize(writer, propertyValue);
                    strWriter.Close();
                    strWriter.Dispose();
                    // remove unneeded encoding tag
                    sb.Remove(0, 41);
                    object[]     attributes = property.GetCustomAttributes(typeof(SettingAttribute), false);
                    SettingScope scope      = SettingScope.Global;
                    if (attributes.Length != 0)
                    {
                        SettingAttribute attribute = (SettingAttribute)attributes[0];
                        scope      = attribute.SettingScope;
                        defaultval = attribute.DefaultValue;
                    }
                    else
                    {
                        scope      = SettingScope.Global;
                        defaultval = "";
                    }
                    string value = defaultval;
                    /// a changer
                    if (!isFirstSave || defaultval == "")
                    {
                        value = sb.ToString();
                    }
                    if (scope == SettingScope.User)
                    {
                        userSettingsList.Add(property.Name, value);
                    }
                    else
                    {
                        globalSettingsList.Add(property.Name, value);
                    }
                }

                #endregion
            }

            #region write Settings

            // write settings to xml
            foreach (KeyValuePair <string, string> pair in globalSettingsList)
            {
                xmlWriter.SetValue(obj.ToString(), pair.Key, pair.Value, SettingScope.Global);
            }
            foreach (KeyValuePair <string, string> pair in userSettingsList)
            {
                xmlWriter.SetValue(obj.ToString(), pair.Key, pair.Value, SettingScope.User);
            }
            xmlWriter.Save();

            #endregion
        }
        /// <summary>
        ///   De-serialize public properties of a Settings object from a given xml file
        /// </summary>
        /// <param name = "obj">Setting Object to retrieve</param>
        /// <param name = "fileName">Xml file name</param>
        public static void Deserialize(object obj)
        {
            string fileName = "";
              INamedSettings namedSettings = obj as INamedSettings;
              if (namedSettings != null)
              {
            fileName = obj + "." + namedSettings.Name + ".xml";
              }
              else
              {
            fileName = obj + ".xml";
              }
              XmlSettingsProvider xmlreader = new XmlSettingsProvider(fileName);
              NLog.Logger log = ServiceScope.Get<ILogger>().GetLogger;
              log.Trace("Deserialize({0},{1})", obj.ToString(), fileName);
              // if xml file doesn't exist yet then create it
              string fullFileName = String.Format(@"{0}\{1}", Options.ConfigDir, fileName);
              ;
              if (!File.Exists(fullFileName)) Serialize(obj);

              foreach (PropertyInfo property in obj.GetType().GetProperties())
              {
            Type thisType = property.PropertyType;

            #region get scope

            SettingScope scope = SettingScope.Global;
            object[] attributes = property.GetCustomAttributes(typeof (SettingAttribute), false);
            string defaultval = "";
            if (attributes.Length != 0)
            {
              SettingAttribute attribute = (SettingAttribute)attributes[0];
              scope = attribute.SettingScope;
              defaultval = attribute.DefaultValue;
            }
            else
            {
              scope = SettingScope.Global;
              defaultval = "";
            }

            #endregion

            if (isCLRType(thisType))

              #region CLR Typed property

            {
              try
              {
            string value = xmlreader.GetValue(obj.ToString(), property.Name, scope);
            if (value == null || value == string.Empty) value = defaultval;
            if (thisType == typeof (string)) property.SetValue(obj, value, null);
            if (thisType == typeof (bool)) property.SetValue(obj, bool.Parse(value), null);
            if (thisType == typeof (Int16)) property.SetValue(obj, Int16.Parse(value), null);
            if (thisType == typeof (Int32)) property.SetValue(obj, Int32.Parse(value), null);
            if (thisType == typeof (Int64)) property.SetValue(obj, Int64.Parse(value), null);
            if (thisType == typeof (UInt16)) property.SetValue(obj, UInt16.Parse(value), null);
            if (thisType == typeof (UInt32)) property.SetValue(obj, UInt32.Parse(value), null);
            if (thisType == typeof (UInt64)) property.SetValue(obj, UInt64.Parse(value), null);
            if (thisType == typeof (float)) property.SetValue(obj, float.Parse(value), null);
            if (thisType == typeof (double)) property.SetValue(obj, double.Parse(value), null);
            if (thisType == typeof (Int16)) property.SetValue(obj, Int16.Parse(value), null);
            if (thisType == typeof (Int32)) property.SetValue(obj, Int32.Parse(value), null);
            if (thisType == typeof (DateTime)) property.SetValue(obj, DateTime.Parse(value), null);
            if (thisType == typeof (bool?)) property.SetValue(obj, bool.Parse(value), null);
            if (thisType == typeof (Int16?)) property.SetValue(obj, Int16.Parse(value), null);
            if (thisType == typeof (Int32?)) property.SetValue(obj, Int32.Parse(value), null);
            if (thisType == typeof (Int64?)) property.SetValue(obj, Int64.Parse(value), null);
            if (thisType == typeof (UInt16?)) property.SetValue(obj, UInt16.Parse(value), null);
            if (thisType == typeof (UInt32?)) property.SetValue(obj, UInt32.Parse(value), null);
            if (thisType == typeof (UInt64?)) property.SetValue(obj, UInt64.Parse(value), null);
            if (thisType == typeof (float?)) property.SetValue(obj, float.Parse(value), null);
            if (thisType == typeof (double?)) property.SetValue(obj, double.Parse(value), null);
            if (thisType == typeof (Int16?)) property.SetValue(obj, Int16.Parse(value), null);
            if (thisType == typeof (Int32?)) property.SetValue(obj, Int32.Parse(value), null);
              }
              catch (Exception) {}
            }
              #endregion

            else
              #region not CLR Typed property

            {
              XmlSerializer xmlSerial = new XmlSerializer(thisType);

              string value = xmlreader.GetValue(obj.ToString(), property.Name, scope);
              if (value != null)
              {
            TextReader reader = new StringReader(value);
            try
            {
              property.SetValue(obj, xmlSerial.Deserialize(reader), null);
            }
            catch (Exception) {}
              }
            }

            #endregion
              }
        }
Esempio n. 3
0
        /// <summary>
        ///   De-serialize public properties of a Settings object from a given xml file
        /// </summary>
        /// <param name = "obj">Setting Object to retrieve</param>
        /// <param name = "fileName">Xml file name</param>
        public static void Deserialize(object obj)
        {
            string         fileName      = "";
            INamedSettings namedSettings = obj as INamedSettings;

            if (namedSettings != null)
            {
                fileName = obj + "." + namedSettings.Name + ".xml";
            }
            else
            {
                fileName = obj + ".xml";
            }
            XmlSettingsProvider xmlreader = new XmlSettingsProvider(fileName);

            NLog.Logger log = ServiceScope.Get <ILogger>().GetLogger;
            log.Trace("Deserialize({0},{1})", obj.ToString(), fileName);
            // if xml file doesn't exist yet then create it
            string fullFileName = String.Format(@"{0}\{1}", Options.ConfigDir, fileName);

            ;
            if (!File.Exists(fullFileName))
            {
                Serialize(obj);
            }

            foreach (PropertyInfo property in obj.GetType().GetProperties())
            {
                Type thisType = property.PropertyType;

                #region get scope

                SettingScope scope      = SettingScope.Global;
                object[]     attributes = property.GetCustomAttributes(typeof(SettingAttribute), false);
                string       defaultval = "";
                if (attributes.Length != 0)
                {
                    SettingAttribute attribute = (SettingAttribute)attributes[0];
                    scope      = attribute.SettingScope;
                    defaultval = attribute.DefaultValue;
                }
                else
                {
                    scope      = SettingScope.Global;
                    defaultval = "";
                }

                #endregion

                if (isCLRType(thisType))

                #region CLR Typed property

                {
                    try
                    {
                        string value = xmlreader.GetValue(obj.ToString(), property.Name, scope);
                        if (value == null || value == string.Empty)
                        {
                            value = defaultval;
                        }
                        if (thisType == typeof(string))
                        {
                            property.SetValue(obj, value, null);
                        }
                        if (thisType == typeof(bool))
                        {
                            property.SetValue(obj, bool.Parse(value), null);
                        }
                        if (thisType == typeof(Int16))
                        {
                            property.SetValue(obj, Int16.Parse(value), null);
                        }
                        if (thisType == typeof(Int32))
                        {
                            property.SetValue(obj, Int32.Parse(value), null);
                        }
                        if (thisType == typeof(Int64))
                        {
                            property.SetValue(obj, Int64.Parse(value), null);
                        }
                        if (thisType == typeof(UInt16))
                        {
                            property.SetValue(obj, UInt16.Parse(value), null);
                        }
                        if (thisType == typeof(UInt32))
                        {
                            property.SetValue(obj, UInt32.Parse(value), null);
                        }
                        if (thisType == typeof(UInt64))
                        {
                            property.SetValue(obj, UInt64.Parse(value), null);
                        }
                        if (thisType == typeof(float))
                        {
                            property.SetValue(obj, float.Parse(value), null);
                        }
                        if (thisType == typeof(double))
                        {
                            property.SetValue(obj, double.Parse(value), null);
                        }
                        if (thisType == typeof(Int16))
                        {
                            property.SetValue(obj, Int16.Parse(value), null);
                        }
                        if (thisType == typeof(Int32))
                        {
                            property.SetValue(obj, Int32.Parse(value), null);
                        }
                        if (thisType == typeof(DateTime))
                        {
                            property.SetValue(obj, DateTime.Parse(value), null);
                        }
                        if (thisType == typeof(bool?))
                        {
                            property.SetValue(obj, bool.Parse(value), null);
                        }
                        if (thisType == typeof(Int16?))
                        {
                            property.SetValue(obj, Int16.Parse(value), null);
                        }
                        if (thisType == typeof(Int32?))
                        {
                            property.SetValue(obj, Int32.Parse(value), null);
                        }
                        if (thisType == typeof(Int64?))
                        {
                            property.SetValue(obj, Int64.Parse(value), null);
                        }
                        if (thisType == typeof(UInt16?))
                        {
                            property.SetValue(obj, UInt16.Parse(value), null);
                        }
                        if (thisType == typeof(UInt32?))
                        {
                            property.SetValue(obj, UInt32.Parse(value), null);
                        }
                        if (thisType == typeof(UInt64?))
                        {
                            property.SetValue(obj, UInt64.Parse(value), null);
                        }
                        if (thisType == typeof(float?))
                        {
                            property.SetValue(obj, float.Parse(value), null);
                        }
                        if (thisType == typeof(double?))
                        {
                            property.SetValue(obj, double.Parse(value), null);
                        }
                        if (thisType == typeof(Int16?))
                        {
                            property.SetValue(obj, Int16.Parse(value), null);
                        }
                        if (thisType == typeof(Int32?))
                        {
                            property.SetValue(obj, Int32.Parse(value), null);
                        }
                    }
                    catch (Exception) {}
                }
                #endregion

                else
                #region not CLR Typed property

                {
                    XmlSerializer xmlSerial = new XmlSerializer(thisType);

                    string value = xmlreader.GetValue(obj.ToString(), property.Name, scope);
                    if (value != null)
                    {
                        TextReader reader = new StringReader(value);
                        try
                        {
                            property.SetValue(obj, xmlSerial.Deserialize(reader), null);
                        }
                        catch (Exception) {}
                    }
                }

                #endregion
            }
        }
        /// <summary>
        ///   Serialize public properties of a Settings object to a given xml file
        /// </summary>
        /// <param name = "obj">Setting Object to serialize</param>
        /// <param name = "fileName">Xml file name</param>
        public static void Serialize(object obj)
        {
            string fileName = "";
              INamedSettings namedSettings = obj as INamedSettings;
              if (namedSettings != null)
              {
            fileName = obj + "." + namedSettings.Name + ".xml";
              }
              else
              {
            fileName = obj + ".xml";
              }
              NLog.Logger log = ServiceScope.Get<ILogger>().GetLogger;
              log.Trace("Serialize({0},{1})", obj.ToString(), fileName);
              Dictionary<string, string> globalSettingsList = new Dictionary<string, string>();
              Dictionary<string, string> userSettingsList = new Dictionary<string, string>();
              XmlSettingsProvider xmlWriter = new XmlSettingsProvider(fileName);
              string fullFileName = String.Format(@"{0}\{1}", Options.ConfigDir, fileName);
              ;

              bool isFirstSave = (!File.Exists(fullFileName));
              foreach (PropertyInfo property in obj.GetType().GetProperties())
              {
            Type thisType = property.PropertyType;
            string defaultval = "";

            #region CLR Typed property

            if (isCLRType(thisType))
            {
              object[] attributes = property.GetCustomAttributes(typeof (SettingAttribute), false);
              SettingScope scope = SettingScope.Global;
              if (attributes.Length != 0)
              {
            SettingAttribute attribute = (SettingAttribute)attributes[0];
            scope = attribute.SettingScope;
            defaultval = attribute.DefaultValue;
              }
              else
              {
            scope = SettingScope.Global;
            defaultval = "";
              }
              string value = defaultval;

              if (!isFirstSave) //else default value will be used if it exists
              {
            if (obj.GetType().GetProperty(property.Name).GetValue(obj, null) != null)
            {
              value = obj.GetType().GetProperty(property.Name).GetValue(obj, null).ToString();
            }
            if (scope == SettingScope.User)
            {
              userSettingsList.Add(property.Name, value);
            }
            else
            {
              globalSettingsList.Add(property.Name, value);
            }
              }
              else
              {
            if (scope == SettingScope.Global) globalSettingsList.Add(property.Name, value);
            if (scope == SettingScope.User) userSettingsList.Add(property.Name, value);
              }
            }
              #endregion

              #region not CLR Typed property

            else
            {
              XmlSerializer xmlSerial = new XmlSerializer(thisType);
              StringBuilder sb = new StringBuilder();
              StringWriter strWriter = new StringWriter(sb);
              XmlTextWriter writer = new XmlNoNamespaceWriter(strWriter);
              writer.Formatting = Formatting.Indented;
              object propertyValue = obj.GetType().GetProperty(property.Name).GetValue(obj, null);
              xmlSerial.Serialize(writer, propertyValue);
              strWriter.Close();
              strWriter.Dispose();
              // remove unneeded encoding tag
              sb.Remove(0, 41);
              object[] attributes = property.GetCustomAttributes(typeof (SettingAttribute), false);
              SettingScope scope = SettingScope.Global;
              if (attributes.Length != 0)
              {
            SettingAttribute attribute = (SettingAttribute)attributes[0];
            scope = attribute.SettingScope;
            defaultval = attribute.DefaultValue;
              }
              else
              {
            scope = SettingScope.Global;
            defaultval = "";
              }
              string value = defaultval;
              /// a changer
              if (!isFirstSave || defaultval == "") value = sb.ToString();
              if (scope == SettingScope.User)
              {
            userSettingsList.Add(property.Name, value);
              }
              else
              {
            globalSettingsList.Add(property.Name, value);
              }
            }

            #endregion
              }

              #region write Settings

              // write settings to xml
              foreach (KeyValuePair<string, string> pair in globalSettingsList)
              {
            xmlWriter.SetValue(obj.ToString(), pair.Key, pair.Value, SettingScope.Global);
              }
              foreach (KeyValuePair<string, string> pair in userSettingsList)
              {
            xmlWriter.SetValue(obj.ToString(), pair.Key, pair.Value, SettingScope.User);
              }
              xmlWriter.Save();

              #endregion
        }