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;
}
}