反射获取config实体类属性并赋值

时间:2022-07-15 04:36:45
/// <summary>
/// 将实体类存入config
/// </summary>
/// <param name="enity"></param>
public void SetValue<T>(T enity) where T : class
{
System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
xDoc.Load(HttpContext.Current.Server.MapPath("~/xxxx.config"));
System.Xml.XmlNode xNode;
System.Xml.XmlElement xElem1;
System.Xml.XmlElement xElem2;
xNode = xDoc.SelectSingleNode("//appSettings");
System.Reflection.PropertyInfo[] properties = enity.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
foreach (System.Reflection.PropertyInfo item in properties)
{
string name = item.Name;
string value = (string)item.GetValue(enity, null);
if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String"))
{
xElem1 = (System.Xml.XmlElement)xNode.SelectSingleNode("//add[@key='" + name + "']");
if (xElem1 != null) xElem1.SetAttribute("value", value);
else
{
xElem2 = xDoc.CreateElement("add");
xElem2.SetAttribute("key", name);
xElem2.SetAttribute("value", value);
xNode.AppendChild(xElem2);
}
}
}
xDoc.Save(HttpContext.Current.Server.MapPath("~/xxxx.config"));
}