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和实体类之间序列化和反序列化相互转换的更多相关文章

  1. c# XML和实体类之间相互转换(序列化和反序列化)[砖]

    link: http://blog.okbase.net/haobao/archive/62.html by: 好饱 我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlU ...

  2. C# XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  3. XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  4. java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  5. [Unity]C#中 将XML和实体类之间进行相互转换的工具类

    using System; using System.Xml; using System.Xml.Serialization; using System.IO; namespace LOTool { ...

  6. 利用MyEclipse连接数据库并自动生成基于注解或者XML的实体类

    一.利用MyEclipse连接数据库 1. 打开MyEclipse的数据库连接视图 然后在Other中找到"MyEclipse Database"中的DB Browser 2. 在 ...

  7. (转)DATATABLE(DATASET)与实体类之间的互转.

    转自:http://www.cnblogs.com/zzyyll2/archive/2010/07/20/1781649.html dataset和实体类 之间的转换 //dataset转实体类  代 ...

  8. .Net类的序列化和反序列化 - 进阶者系列 - 学习者系列文章

    今天看了下以前的一个工具的代码,其中涉及到.NET类的序列化和反序列化问题,所以就写一下. 这里说一下.NET类序列化的好处..NET类在序列化之前只是一个相对狭义的类.通过序列化,能够更好的保存该类 ...

  9. 初识序列化和反序列化,使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

    序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程.对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程.本篇主要包括: ● 使用 ...

随机推荐

  1. RPD Volume 168 Issue 4 March 2016 评论4

    Non-vascular interventional procedures: effective dose to patient and equivalent dose to abdominal o ...

  2. HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. 【扩展欧几里得】poj2115 C Looooops

    题意大概是让你求(A+Cx) mod 2^k = B的最小非负整数解. 若(B-A) mod gcd(C,2^k) = 0,就有解,否则无解. 式子可以化成Cx + 2^k*y = B - A,可以用 ...

  4. 解决ubuntu系统中wireshark:Couldn't run /usr/bin/dumpcap in child process: Permission denied的问题

    ubuntu系统运行WIreshark的时候,出现如下错误: Couldn't run /usr/bin/dumpcap in child process: Permission denied 解决办 ...

  5. 文件描述符与socket连接

    每个进程开启一个soeket连接,都会占用一个文件描述符.   1. 概述       在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.       文件 ...

  6. javascript 定时器 笔记

    最近想看下定时器,发现这东西越看越牵连的东西越多,比如js单线程,EVent loop 什么的 看到了几篇比较好的文章 http://ejohn.org/blog/how-javascript-tim ...

  7. RUEI 13.1.1版本在OEL 5.7上的安装

    准备工作 ntp的工作和同步 /sbin/chkconfig --list | grep ntpd ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off /sb ...

  8. golangWEB框架gin学习之获取get参数

    原文地址:http://www.niu12.com/article/40package main import ( "fmt" "github.com/gin-gonic ...

  9. shell产生随机数七种方法

    shell实例浅谈之三产生随机数七种方法   一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大 ...

  10. mysql 5.5多实例部署

    mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成. 1. mysql多实例的原理 2. mysql多实例的特点 3. mysql多实例应用场景 4. mysql5.5多实例部署方法 一. ...