当一个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. 关于c#连接数据库的代码

    using System;using System.Collections.Generic;using System.Data;using System.Data.SQLite;using Syste ...

  2. CCF关于NOI省选申诉的说明

    NOI省选由各省根据NOI条例及CCF省选规定组织省内选拔,各省组织单位对其省选过程和结果负责 对省选的申诉首先提交至NOI省组织单位,NOI省组织单位必须先给出处理意见.对于NOI省组织单位不能决定 ...

  3. 【Java集合系列二】LinkedList解析

    一.简介 1.LinkedList继承关系 2.LinkedList底层实现 LinkedList使用双向链表存储数据,所以没有默认的容量,也不会有扩容一说.只有两个指针,永远指向链表的两端:firs ...

  4. [Leetcode 78]求子集 Subset

    [题目] Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The ...

  5. Scrapy、Scrapy-redis组件

    目录 Scrapy 一.安装 二.基本使用 1. 基本命令 2.项目结构以及爬虫应用简介 3. 小试牛刀 4. 选择器 5. 格式化处理 6.中间件 7. 自定制命令 8. 自定义扩展 9. 避免重复 ...

  6. WEBBASE篇: 第八篇, JavaScript知识2

    JavaScript 2 一,数据类型: 作用: 约束了数据在内存中所占空间大小问题的: JS数据类型分类: 基本数据类型(值类型) (1) number 类型: 数字类型,可以表示32位的整数或64 ...

  7. es6学习日记1

    1.let和const ES6新增了let命令,用来声明变量,用法类似于var ,但是声明的变量只在let命令所在代码块内有效. 例如: { let a = 10; var b = 1; } a // ...

  8. BZOJ1800:fly 飞行棋 (双指针 组合数)

    pro: 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形. N<20; sol:很可能被 ...

  9. spring cloud/spring boot同时支持http和https访问

    l老规矩为大家祭出原帖:https://www.cnblogs.com/lianggp/p/8136540.html  不再转述

  10. SpringCloud分布式配置中心所遇问题

    1.如果更换了获取配置文件的名称一定要在客户端配置文件的name更改2.不建议服务器设置下拉到git仓库的配置文件地址,可能导致更换地址之后无法获取到新更改的