//示例类
public class TestClass
{
/// <summary>
/// 编号
/// </summary>
public int ID{ get; private set; }
/// <summary>
/// 姓名
/// </summary>
public string Name{ get; private set; }
/// <summary>
/// 年龄
/// </summary>
public int Age{ get; private set; }
}
1、Class转XML,支持私有访问器(private set)
/// <summary>
/// Class 转换 XML
/// </summary>
/// <param name="obj">要转换的对象</param>
/// <param name="document">XML文档</param>
/// <param name="parentNode">转换的初始XML节点</param>
/// <param name="notClass">取Class的值,不访问类里的属性</param>
public static void ClassConvertXml(object obj, XmlDocument document, XmlNode parentNode, List<string> notClass)
{
PropertyInfo[] array = obj.GetType().GetProperties();
foreach (PropertyInfo item in array)
{
XmlNode currentNode = document.CreateElement(item.Name);
object value = item.GetValue(obj);
if (item.PropertyType.IsClass && notClass.Contains(item.PropertyType.Name.ToLower()) == false)
{
ClassConvertXml(value, document, currentNode, notClass);
}
else
{
currentNode.AppendChild(document.CreateTextNode(value?.ToString()));
}
parentNode.AppendChild(currentNode);
}
}
使用
//XML文档
XmlDocument xml = new XmlDocument();
//文档属性
xml.AppendChild(xml.CreateXmlDeclaration("1.0", "utf-8", null));
//文档根节点
xml.AppendChild(xml.CreateElement("Root"));
//转换
ClassConvertXml(new TestClass(), xml, xml.DocumentElement, new List<string> { "string" });
//保存XML文档
string fileName=@"C:\TestClass.xml";
xml.Save(fileName);
2、XML转Class
/// <summary>
/// XML 转换 Class
/// </summary>
/// <param name="parentNode">转换至初始XML节点</param>
/// <param name="obj">转换至对象</param>
public static void XmlConvertClass(XmlNode parentNode, object obj)
{
XmlNodeList nodeList = parentNode.ChildNodes;
foreach (XmlNode item in nodeList)
{
PropertyInfo info = obj.GetType().GetProperty(item.Name);
if (item.FirstChild != null && item.FirstChild.NodeType == XmlNodeType.Element)
{
XmlConvertClass(item, info.GetValue(obj));
}
else
{
info.SetValue(obj, Convert.ChangeType(item.InnerText, info.PropertyType));
}
}
}
使用
//读取XML文档
string fileName=@"C:\TestClass.xml";
XmlDocument document = new XmlDocument();
document.Load(fileName);
TestClass testClass= new TestClass();
//转换
XmlConvertClass(document.DocumentElement, testClass);