XML文件的读取、序列化和反序列化操作
public class XmlHelper
{
//从xml中获取MsgType
public static string XMLSelect(string XML)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(XML);
XmlNodeList Msgxnl = xmldoc.SelectNodes("xml/MsgType");
XmlNodeList Eventxnl = xmldoc.SelectNodes("xml/Event");
string MsgType = string.Empty;
string Event = string.Empty;
if (Msgxnl.Count != )//msgType不为空
{
MsgType = Msgxnl[].InnerText.Trim();
if (MsgType == "event")
{
if (Eventxnl.Count != )//event不为空
{
Event = Eventxnl[].InnerText.Trim();
if (Event == "unsubscribe" || Event == "subscribe" || Event == "LOCATION")
{
MsgType = Event;
}
else//eventKey存在
{
XmlNodeList xnlEventKey = xmldoc.SelectNodes("xml/EventKey");
if (xnlEventKey.Count != )
{
MsgType = xnlEventKey[].InnerText.Trim();
}
}
}
}
}
//else
//{
// XmlNode xn = xmldoc.SelectSingleNode("UpdateInfo/MsgType");
// if (xn!=null)
// {
// MsgType = xn.InnerText.Trim();
// }
//}
return MsgType;
}
//对象反序列化
public static T XmlDeserialize<T>(string xmlString)
{
T t = default(T);
using (MemoryStream stream = new MemoryStream())
{
using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8))
{
sw.Write(xmlString);
sw.Flush();
stream.Seek(, SeekOrigin.Begin);
XmlSerializer serializer = new XmlSerializer(typeof(T));
try
{
t = ((T)serializer.Deserialize(stream));
}
catch (Exception ex)
{
throw ex;
}
}
}
return t;
}
//自定义对象序列化成字符串
public static string CustomXMLSerialize<T>(T obj, string XML)
{
StringBuilder stringBuilder = new StringBuilder();
Type type = obj.GetType();//TextSendInfo
object[] classAtts = obj.GetType().GetCustomAttributes(typeof(XmlRootAttribute), false);//返回自定义特性的数组,XmlRootAttribute
if (classAtts.Length > )
{
string XmlRoot = ((XmlRootAttribute)classAtts[]).ElementName;//xml
stringBuilder.Append("<");
stringBuilder.Append(XmlRoot);
stringBuilder.Append(">"); PropertyInfo[] propertyArr = obj.GetType().GetProperties();//5个属性元素
if (propertyArr.Length > )
{
foreach (var propertyInfo in propertyArr)
{
object value = propertyInfo.GetValue(obj, null);//根据propertyInfo属性从obj中获取值,"请先在授权页面申请授权,再使用该功能!"
object[] propertyAtts = propertyInfo.GetCustomAttributes(typeof(XmlElementAttribute), false);//XmlElementAttribute
if (propertyAtts.Length > )
{
string xmlElementName = ((XmlElementAttribute)propertyAtts[]).ElementName;//content
stringBuilder.Append("<");
stringBuilder.Append(xmlElementName);
stringBuilder.Append(">");
if (xmlElementName == "CreateTime")
{
stringBuilder.Append(value);
}
else
{
stringBuilder.Append("<![CDATA[" + value + "]]>");
}
stringBuilder.Append("</");
stringBuilder.Append(xmlElementName);
stringBuilder.Append(">");
}
}
}
if (XML != string.Empty)
{
stringBuilder.Append(XML);
}
stringBuilder.Append("</");
stringBuilder.Append(XmlRoot);
stringBuilder.Append(">");
}
return stringBuilder.ToString();
}
}
XML文件的读取、序列化和反序列化操作的更多相关文章
- 基于.net core封装的xml序列化,反序列化操作
需求: 由于在.net core中去除了Xml序列化XmlSerializer操作类.因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题.因此封装了一个xml序列化与反序列化操作的类库 ...
- python json序列化与反序列化操作
python json序列化与反序列化操作 # dumps() dict-->str 序列化 # loads() str---dict 反序列化 result1 = json.dumps({'a ...
- java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)
本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...
- spring 框架的xml文件如何读取properties文件数据
spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...
- python之xml 文件的读取方法
''' xml 文件的读取方法 ''' #!/usr/bin/env python # -*- coding: utf- -*- import xml.etree.ElementTree as ET ...
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
- 用dom4j解析xml文件并执行增删改查操作
转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...
- Java文件操作①——XML文件的读取
一.邂逅XML 文件种类是丰富多彩的,XML作为众多文件类型的一种,经常被用于数据存储和传输.所以XML在现今应用程序中是非常流行的.本文主要讲Java解析和生成XML.用于不同平台.不同设备间的数据 ...
- JavaScript XML 兼容处理,序列化和反序列化以及回调事件
浏览器中XML DOM的支持 IE中通过ActiveXObject实现了XML的支持,存在一下几个版本:Microsoft.XmlDom,MSXML2.DOMDocument,MSXML2.DOMDo ...
- javascript 实现 对XML文件 2级/3级联动操作
js代码 //实现对xml文档的读取:function loadXMLDoc(dname) { try // Internet Explorer { xmlDoc = new ActiveXObjec ...
随机推荐
- Combination Sum [LeetCode]
Problem Description: http://oj.leetcode.com/problems/combination-sum/ Basic idea: It seems complicat ...
- Jquery元素追加和删除
原文链接:http://www.cnblogs.com/william-lin/archive/2012/08/12/2635402.html 介绍 DOM是Document Object Mo ...
- ABAP之DIALOG
明天系统上线,数据一团糟,没人提BUG,无聊ING.... 今天说说SAP开发常用的DIALOG吧 一般单独的DIALOG程序可以直接建成函数组,功能组,普通报表程序. 基本都是统一的样式,主程序中I ...
- backbonejs mvc框架的增删查改实例
一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https://github.com/nonocast/e ...
- 陈朱兴-js写法【案例】:
ajax请求: 一.从服务器端请求数据: var url = '';url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='+ ...
- treap 1286郁闷的出纳员.cpp
#include<cstdio>#include<cstdlib>#include<ctime>struct shu{ int l,r,sum,zhi,dui;}a ...
- HDU 4050 wolf5x 概率dp 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=4050 题意: 现在主角站在0处,需要到达大于n的位置 主角要进入的格子有三种状态: 0. 不能进入 1. 能进入 ...
- 其他窗体赋值给comboBox实现值的回显,并使赋的值处于选中状态(根据text获取selectedindex)
Form1 发货单位的这个下拉框comboBox1已经绑定数据库test表的name字段,里面有很多单位名称 比如有:甲公司.乙公司... 1.Form1的comboBox1首先绑定数据库的数据表te ...
- WCF中常见的几种Host,承载WCF服务的方法
1:写在前面 我们都知道WCF在运行的时候必须自己提供宿主来承载服务.WCF 本身没有附带宿主,而是提供了一个 ServiceHost 的类,该类允许您在自己的应用程序中host WCF 服务.然后调 ...
- 在linux终端下打开pdf文件
已经使用linux有很长的时间了,感觉linux的终端使用起来非常的方便.但是怎么在linux下用命令的方式打开pdf文件呢.我查了一下,打开pdf的命令是: evince [filename] 例如 ...