反序列化和序列化xml使用反射处理节点的属性
当一个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使用反射处理节点的属性的更多相关文章
- Xml文档添加节点和属性
XmlDocument doc = new XmlDocument(); XmlElement xmlElement = doc.CreateElement("节点名称"); xm ...
- XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)
以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\
1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...
- 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...
- WCF中序列化(XML\JSON\Dt)
序列化 是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象. 序列化描述了持久化 ...
- C#序列化xml,开发常用
序列化操作对于开发人员来说最熟悉不过了. 序列化分为:序列化和反序列化. 序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程. 与序列化相对的是反序列化,它将流转换为对象.这两个过程结合 ...
- Tomcat解析XML和反射创建对象原理
Tomcat解析XML和反射创建对象原理 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Me ...
- C#中操作xml文件(插入节点、修改、删除)
已知有一个xml文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?> <b ...
- (转载)读取xml中的指定节点的值
/// <summary> /// 读取xml中的指定节点的值 /// </summary> private st ...
随机推荐
- linux学习--目录切换命令 cd
- ajax中的一些参数的含义及用法
jquery中的ajax方法参数总结: 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get) ...
- java语言编写矩阵的四则运算
题目要求如下: 设计程序实现矩阵的四则运算 设计要求: (1) 实现矩阵的四则运算. (2) 考虑实现带变元的矩阵计算. (3)考虑实现矩阵的特征值和特征向量的计算. 我使用java语言写的 目录结构 ...
- open live writer安装教程和账号配置
第一步:Open Live Writer软件下载.官方地址:http://openlivewriter.org/ 第二步:双击安装文件(OpenLiveWriterSetup.exe),然后点击下一步 ...
- css 文本超出范围显示省略号
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 1159 Palindrome
Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 68562 Accepted: 23869 Desc ...
- C++ 跨语言调用 Java
C++ 跨语言调用 Java Java JDK 提供了 JNI 接口供 C/C++ 程序调用 Java 编译后的类与方法,主要依赖于头文件(jni.h) 和 动态库(jvm.so/jvm.dll),由 ...
- spring ico
代码非常简单.如果缺少jar包将导致报错. 需要5个spring jar包和1个logging jar,否则报错. org.springframework.asm.jarorg.springframe ...
- python 2
1. 格式化输出 %s 可以代替str %d 可以代替int %f 可以代替浮点数( float ) 格式: Name = input('你的名字:') Age = int(input('你的年龄: ...
- Redis使用规范
突出强调部分 [强制]key名不要包含特殊字符,如空格.换行.单双引号以及其他转义字符 [强制]拒绝bigkey(防止网卡流量.慢查询) [强制]控制key的生命周期,redis不是垃圾桶 [强制]技 ...