C# 类 与 XML 相互转换

	//示例类
	 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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值