用C#实现XML和实体类之间序列化和反序列化相互转换
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Xml;
using System.Xml.Serialization; /// <summary>
/// Xml序列化与反序列化
/// </summary>
public class XmlUtil
{
#region 反序列化
/// <summary>
/// 反序列化
/// </summary>
/// <param name="type">类型</param>
/// <param name="xml">XML字符串</param>
/// <returns></returns>
public static object Deserialize(Type type, string xml)
{
try
{
using (StringReader sr = new StringReader(xml))
{
XmlSerializer xmldes = new XmlSerializer(type);
return xmldes.Deserialize(sr);
}
}
catch (Exception e)
{ return null;
}
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="type"></param>
/// <param name="xml"></param>
/// <returns></returns>
public static object Deserialize(Type type, Stream stream)
{
XmlSerializer xmldes = new XmlSerializer(type);
return xmldes.Deserialize(stream);
}
#endregion #region 序列化
/// <summary>
/// 序列化
/// </summary>
/// <param name="type">类型</param>
/// <param name="obj">对象</param>
/// <returns></returns>
public static string Serializer(Type type, object obj)
{
MemoryStream Stream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(type);
try
{
//序列化对象
xml.Serialize(Stream, obj);
}
catch (InvalidOperationException)
{
throw;
}
Stream.Position = ;
StreamReader sr = new StreamReader(Stream);
string str = sr.ReadToEnd(); sr.Dispose();
Stream.Dispose(); return str;
} #endregion
} /* 实体对象转换到Xml */
public class Student
{
public string Name { set; get; }
public int Age { set; get; }
}
Student stu1 = new Student() { Name = "okbase", Age = };
string xml = XmlUtil.Serializer(typeof(Student), stu1);
Console.Write(xml); /* Xml转换到实体对象 */
Student stu2 = XmlUtil.Deserialize(typeof(Student), xml) as Student;
Console.Write(string.Format("名字:{0},年龄:{1}", stu2.Name, stu2.Age)); /* DataTable转换到Xml */
// 生成DataTable对象用于测试
DataTable dt1 = new DataTable("mytable"); // 必须指明DataTable名称
dt1.Columns.Add("Dosage", typeof(int));
dt1.Columns.Add("Drug", typeof(string));
dt1.Columns.Add("Patient", typeof(string));
dt1.Columns.Add("Date", typeof(DateTime));
// 添加行
dt1.Rows.Add(, "Indocin", "David", DateTime.Now);
dt1.Rows.Add(, "Enebrel", "Sam", DateTime.Now);
dt1.Rows.Add(, "Hydralazine", "Christoff", DateTime.Now);
dt1.Rows.Add(, "Combivent", "Janet", DateTime.Now);
dt1.Rows.Add(, "Dilantin", "Melanie", DateTime.Now);
// 序列化
xml = XmlUtil.Serializer(typeof(DataTable), dt1);
Console.Write(xml); /* Xml转换到DataTable */
// 反序列化
DataTable dt2 = XmlUtil.Deserialize(typeof(DataTable), xml) as DataTable;
// 输出测试结果
foreach (DataRow dr in dt2.Rows)
{
foreach (DataColumn col in dt2.Columns)
{
Console.Write(dr[col].ToString() + " ");
}
Console.Write("\r\n");
} /* List转换到Xml */
// 生成List对象用于测试
List<Student> list1 = new List<Student>();
list1.Add(new Student() { Name = "okbase", Age = });
list1.Add(new Student() { Name = "csdn", Age = });
// 序列化
xml = XmlUtil.Serializer(typeof(List<Student>), list1);
Console.Write(xml); /* Xml转换到List */
List<Student> list2 = XmlUtil.Deserialize(typeof(List<Student>), xml) as List<Student>;
foreach (Student stu in list2)
{
Console.WriteLine(stu.Name + "," + stu.Age.ToString());
} protected void Page_Load(object sender, EventArgs e)
{
string strTest = @"<Relationships>
<VariationParent xmlns='http://www.microsoft.com/schema/Products/2011-10-01'>
<Identifiers>
<MarketplaceASIN>
<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
<ASIN>B00K69WURQ</ASIN>
</MarketplaceASIN>
<MarketplaceASIN>
<MarketplaceId>TBVPDKIKX0DER</MarketplaceId>
<ASIN>C00K69WURQ</ASIN>
</MarketplaceASIN>
<MarketplaceASIN>
<MarketplaceId>KlVPDKIKX0DER</MarketplaceId>
<ASIN>D00K69WURQ</ASIN>
</MarketplaceASIN>
</Identifiers>
</VariationParent>
</Relationships>";
TextBox1.Text = ""; XmlDocument doc = new XmlDocument();
doc.LoadXml(strTest);
XmlElement root = doc.DocumentElement;
//用于带命名空间的XML操作
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.microsoft.com/schema/Products/2011-10-01");
XmlNodeList macthNodes = root.SelectNodes("//ab:Identifiers/ab:MarketplaceASIN", nsmgr); for (int i = ; i < macthNodes.Count; i++)
{
//删除生成的命名空间,生成标准XML。
string matchNode = CleanXmlnsTag(macthNodes[i].OuterXml);
MarketplaceASIN ma = XmlUtil.Deserialize(typeof(MarketplaceASIN), matchNode) as MarketplaceASIN;
if (ma != null)
{
Response.Write(ma.MarketplaceId + "---------" + ma.ASIN + "<br/>");
}
}
} /* 实体对象 */
public class MarketplaceASIN
{
public string MarketplaceId { set; get; }
public string ASIN { set; get; }
} protected string CleanXmlnsTag(string xml)
{
xml = xml.Replace("xmlns=\"http://www.microsoft.com/schema/Products/2011-10-01\"", "");
return xml;
}
用C#实现XML和实体类之间序列化和反序列化相互转换的更多相关文章
- c# XML和实体类之间相互转换(序列化和反序列化)[砖]
link: http://blog.okbase.net/haobao/archive/62.html by: 好饱 我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlU ...
- C# XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...
- XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- java中的xml与实体类之间的映射
实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...
- [Unity]C#中 将XML和实体类之间进行相互转换的工具类
using System; using System.Xml; using System.Xml.Serialization; using System.IO; namespace LOTool { ...
- 利用MyEclipse连接数据库并自动生成基于注解或者XML的实体类
一.利用MyEclipse连接数据库 1. 打开MyEclipse的数据库连接视图 然后在Other中找到"MyEclipse Database"中的DB Browser 2. 在 ...
- (转)DATATABLE(DATASET)与实体类之间的互转.
转自:http://www.cnblogs.com/zzyyll2/archive/2010/07/20/1781649.html dataset和实体类 之间的转换 //dataset转实体类 代 ...
- .Net类的序列化和反序列化 - 进阶者系列 - 学习者系列文章
今天看了下以前的一个工具的代码,其中涉及到.NET类的序列化和反序列化问题,所以就写一下. 这里说一下.NET类序列化的好处..NET类在序列化之前只是一个相对狭义的类.通过序列化,能够更好的保存该类 ...
- 初识序列化和反序列化,使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化
序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程.对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程.本篇主要包括: ● 使用 ...
随机推荐
- 【二分】【动态规划】Codeforces Round #393 (Div. 1) B. Travel Card
水dp,加个二分就行,自己看代码. B. Travel Card time limit per test 2 seconds memory limit per test 256 megabytes i ...
- 前端基础-JavaScript的基本概述和语法
1.JavaScript概述 2.JavaScript引入方式 3.JavaScript语言规范 4.JavaScript语言基础 5.JavaScript数据类型 6.JavaScript运算符 7 ...
- 8.2(java学习笔记)反射
一.基础知识 对象是表示或封装一些数据,一个类被加载后JVM会创建一个对应该类的Class对象, 类的整个结构信息会被放在对应的对象中,通过这个对象我们可以获取改类的全部信息, 而这些操作称为反射. ...
- Spark机器学习:TF-IDF实例讲解
测试数据源:20 Newsgroups (http://qwone.com/~jason/20Newsgroups/),其中包含20个领域的新闻,此次我们使用20news-bydate-train作为 ...
- hdu2829 四边形优化dp
Lawrence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- VB6的UTF8编码解码
'UTF-8编码 Public Function UTF8Encode(ByVal szInput As String) As String Dim wch As String D ...
- kernel简介
内存管理 一般来看有三种类型的地址:物理地址.线性地址和逻辑地址,逻辑地址的精髓在于将地址分成两部分:段基地址+偏移,翻译的过程如下: 线性地址的精髓在于将所有的内存按照一定的大小分成了一页一页,对多 ...
- python pip更换下载源(转)
对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...
- python 操作solr索引数据
测试代码1: def test(self): data = {", "*字段名*": u"我是一个大好人"}}} params = {"bo ...
- Invalidate、RedrawWindow与UpdateWindow的差别
一:什么时候才会发生重绘窗体的消息? 当须要更新或又一次绘制窗体的外观时,应用程序就会发送WM_PAINT消息. 对窗体进行又一次绘制. 二:Invalidate() -- RedrawW ...