public class XmlReadWrite { static string filePath = Environment.CurrentDirectory + "\\config.xml"; private static XmlElement Init(ref XmlDocument doc) { XmlElement root; if (File.Exists(filePath)) { // 参数存在,加载XML doc.Load(filePath); // 获得根节点 root = doc.DocumentElement; } else { // 参数不存在,创建xml文档第一行 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); doc.AppendChild(dec); // 创建根节点 root = doc.CreateElement("root"); doc.AppendChild(root); } return root; }
/// <summary> /// 系统配置文件读操作 /// </summary> /// <param name="systemConfig"></param> /// <param name="msg"></param> public static string ReadConfig<T>(T t) { XmlDocument doc = new XmlDocument(); XmlElement root = Init(doc); string msg = string.Empty; try { PropertyInfo[] PropertyList = t.GetType().GetProperties(); foreach (PropertyInfo item in PropertyList) { XmlNode xn = root.SelectSingleNode(item.Name); if (xn != null) { if (xn.InnerText.Trim() == "") msg = "节点" + item.Name + "没有值!"; else { var type = item.PropertyType; item.SetValue(t, TypeConversion(type.Name, xn.InnerText.Trim()),null); } } else msg = "节点" + item.Name + "不存在!"; } return msg; } catch (Exception ex) { return ex.Message; } }
/// <summary> /// 系统配置文件写操作 /// </summary> /// <param name="systemConfig"></param> /// <param name="msg"></param> /// <returns></returns> public static string WriteConfig<T>(T t) { XmlDocument doc = new XmlDocument(); XmlElement root = Init(ref doc); string msg = string.Empty; try { PropertyInfo[] PropertyList = t.GetType().GetProperties(); foreach (PropertyInfo item in PropertyList) { XmlNode xn = root.SelectSingleNode(item.Name); if (xn != null) xn.InnerText = item.GetValue(t, null).ToString(); else { xn = doc.CreateElement(item.Name); xn.InnerText = item.GetValue(t, null).ToString(); root.AppendChild(xn); } } doc.Save(filePath); return msg; } catch (Exception ex) { return ex.Message; } } }
private static object TypeConversion(string type,string oldValue) { try { switch (type.ToLower()) { case "boolean": return Convert.ToBoolean(oldValue); case "byte": return Convert.ToByte(oldValue); case "sbyte": return Convert.ToSByte(oldValue); case "char": return Convert.ToChar(oldValue); case "decimal": return Convert.ToDecimal(oldValue); case "double": return Convert.ToDouble(oldValue); case "int32": return Convert.ToInt32(oldValue); case "int64": return Convert.ToInt64(oldValue); case "string": return Convert.ToString(oldValue); default: return null; } }catch(Exception ex) { NLog.Info("数据类型转换失败!" + ex.Message); return null; } }