当一个xml中有大量的属性XmlAttribute需要序列化和反序列化,通常需要复制粘贴大量的如下代码,显得很丑陋,而且容易出错:

XmlAttribute attr = Doc.CreateAttribute("MaterialMark");
attr.Value = myObject.MaterialMark;
xmlroot.Attributes.Append(attr)

XmlAttribute attr = mlnode.Attributes["MaterialMark"];
if (attr != null)
myObject.index = findex.Value;

可以使用反射技术,做出修改,如下:

public Class MyObject
{
public string A
{
get;
set;
} public int B
{
get;
set;
} public double C
{
get;
set;
} }
    void getAttrFromXml(MyObject myObject,XmlNode xmlNode)
{
foreach (XmlAttribute attr in xmlNode.Attributes)
{
object val = attr.Value;
Type type = typeof(MyObject);
PropertyInfo proInf = type.GetProperty(attr.Name);
switch (proInf.PropertyType.ToString())
{
case "System.String":
proInf.SetValue(myObject, val, null);
break; case "System.Double":
double result = ;
double.TryParse(val.ToString(), out result);
proInf.SetValue(myObject, result, null);
break; default:
//自己添加用到的类型
break;
}
}
}
        void setAttrFromObject(MyObject myobject, XmlNode xmlNode)
{
Type type = typeof(MyObject);
foreach (PropertyInfo proInf in type.GetProperties())
{
XmlAttribute attr = xmlNode.OwnerDocument.CreateAttribute(proInf.Name);
if(proInf.GetValue(myObject,null)!=null)
attr.Value = proInf.GetValue(myObject,null).ToString();
xmlNode.Attributes.Append(attr);
}
}

反序列化和序列化xml使用反射处理节点的属性的更多相关文章

  1. Xml文档添加节点和属性

    XmlDocument doc = new XmlDocument(); XmlElement xmlElement = doc.CreateElement("节点名称"); xm ...

  2. XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)

    以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...

  3. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  4. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

    http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...

  5. WCF中序列化(XML\JSON\Dt)

    序列化 是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象. 序列化描述了持久化 ...

  6. C#序列化xml,开发常用

    序列化操作对于开发人员来说最熟悉不过了. 序列化分为:序列化和反序列化. 序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程. 与序列化相对的是反序列化,它将流转换为对象.这两个过程结合 ...

  7. Tomcat解析XML和反射创建对象原理

    Tomcat解析XML和反射创建对象原理 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Me ...

  8. C#中操作xml文件(插入节点、修改、删除)

    已知有一个xml文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?> <b ...

  9. (转载)读取xml中的指定节点的值

            /// <summary>         /// 读取xml中的指定节点的值        /// </summary>         private st ...

随机推荐

  1. 2015-10-20 sql2

                                                                      SQL SERVER(二) 三.插入,更新,删除,添加 3.1ins ...

  2. vue教程自学笔记(二)

    三.模板语法 1.文本 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值. 通过v-once指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新. 2.原始H ...

  3. python全栈开发笔记----基本数据类型---列表方法

    #list 类中提供的方法 #参数 1.def append(self, *args, **kwargs)原来值最后追加#对象..方法(..) #li对象调用append方法 li = [11,22, ...

  4. Beta 冲刺 (6/7)

    Beta 冲刺 (6/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 组织会议 开发wxpy部分功能 展示G ...

  5. Convert Binary Search Tree to Doubly Linked List

    Convert a binary search tree to doubly linked list with in-order traversal. Example Given a binary s ...

  6. php 安装redis

    https://www.cnblogs.com/yuuje/p/8243234.html

  7. TensorFlow 神经网络相关函数

    TensorFlow 激活函数 激活操作提供用于神经网络的不同类型的非线性.这些包括平滑的非线性(sigmoid,tanh,elu,softplus,和softsign),连续的,但不是到处可微函数( ...

  8. JAVA学习笔记系列2-Java程序的运行机制

    计算机高级语言的类型主要有编译型和解释型两种,而java语言是两种类型的结合. java首先利用文本编辑器编写java源程序,源文件后缀名为.java,再利用编译器(javac)将源程序编译成字节码文 ...

  9. lvs三种模式的优缺点对比

    电面只回答上来少部分,所以......恶补.总结

  10. format 插入一个字符,%d,%n