C#实现XML与实体类之间相互转换的方法(序列化与反序列化)

本文实例讲述了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 = 0;
    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 = 10 };
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(25, "Indocin", "David", DateTime.Now);
dt1.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
dt1.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
dt1.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
dt1.Rows.Add(100, "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>(3);
list1.Add(new Student() { Name = "okbase", Age = 10 });
list1.Add(new Student() { Name = "csdn", Age = 15 });
// 序列化
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 = 0; 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;
}

PS:小编这里再来为大家推荐几款关于xml操作的在线工具供大家免费使用。相信在以后开发中可以用的到:

在线XML格式化/压缩工具:
http://tools.jb51.net/code/xmlformat

在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson

xml代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat

HTML/XML转义字符对照表:
http://tools.jb51.net/table/html_escape

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

(0)

相关推荐

  • Asp.Net+XML操作基类(修改,删除,新增,创建)第1/2页

    /**********************************************************************************  *   * 功能说明:XML处理基类  * 作者: 刘功勋;  * 版本:V0.1(C#2.0);时间:2006-12-13  *   * *******************************************************************************/ using System;

  • C#自定义处理xml数据类实例

    本文实例讲述了C#自定义处理xml数据类.分享给大家供大家参考.具体分析如下: 这个C#类专门用户处理xml数据,可以大大简化xml的操作,类中封装了常用的xml操作,包括打开.读取xml数据,读取.写入节点数据,通过xpath读取节点数据,导出节点数据等等,还可以根据需要自己扩充类的功能. using System; using System.Data; using System.IO; using System.Xml; namespace DotNet.Utilities { public

  • C#实现实体类和XML相互转换

    一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T>(T obj) { using (StringWriter sw = new StringWriter()) { Type t= obj.GetType(); XmlSerializer serializer = new XmlSerializer(obj.GetType()); serializer.

  • asp.net类序列化生成xml文件实例详解

    本文实例讲述了asp.net类序列化生成xml文件的方法.分享给大家供大家参考,具体如下: 根据设计的需求需要开发多个商品的API 原XML文件如下: <urlset> <url> <loc>http://www.xxxxx.com/todaydetials.aspx?id=143</loc> <data> <display> <website>爱购114</website> <siteurl>ht

  • C#中把任意类型的泛型集合转换成SQLXML数据格式的实例

    话不多说,跟着小编一起来看下吧 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlTypes; using System.Data; using System.Reflection; using System.IO; using System.Xml; namespace CollectionToXml { class Program

  • Visual Studio 2013如何使XML文件转换成类

    今天给大家带来一个Visual Studio 2013中非常实用的功能,自动生成XML反序列化的类.以往想要在代码中将XML反序列化成对象,我们要么手动创建这些对象(很容易出错),要么借助于第三方的工具来生成Class.而现在,Visual Studio 2013可以自动帮我们完成这个工作.当然,如果你对XML反序列化并不感兴趣,而热衷于使用XElement或者XMLDocument来加载和解析XML,那么你可以忽略本文的内容. 来看看在Visual Sutdio 2013中如何使用这个功能!

  • C#实现XML与实体类之间相互转换的方法(序列化与反序列化)

    本文实例讲述了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序列化与反序列化 //

  • Java中实体类为什么要实现Serializable序列化的作用

    客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间.如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源. web服务器通常将那些暂时不活动但未超时的HttpSession对象转移到文件

  • php短网址和数字之间相互转换的方法

    本文实例讲述了php短网址和数字之间相互转换的方法.分享给大家供大家参考.具体实现方法如下: <?php /** * 将数字转为短网址代码 * * @param int $number 数字 * @return string 短网址代码 */ function generate_code($number) { $out = ""; $codes = "abcdefghjkmnpqrstuvwxyz23456789ABCDEFGHJKMNPQRSTUVWXYZ"

  • Android JSON数据与实体类之间的相互转化(GSON的用法)

    这篇文章就是示范如何用GSON把JSON数据与实体类进行相互转化,需要用到gson-2.3.1.jar这个包.直接贴代码了: import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken

  • mybatis typeAliases 给实体类起别名的方法

    typeAliases 在我们开发中,Mapper中的实体类每次都要写上包名,是不是特别的麻烦 针对这一现象,myabtis提供了解决方案,简化开发 typeAliases标签 第一种用法 在主配置文件中 配置[不是映射文件,而是主配置文件] <typeAliases> <!--type:实体类的具体全限定类名, alias:别名--> <typeAlias type="com.yixuexi.entity.User" alias="User&q

  • Python全角与半角之间相互转换的方法总结

    目录 1.应用领域: 2.全角半角转换概述 3.请注意: 4.应用到的库函数 5.全角转半角: 6.半角转成全角: 附:如何通过python转换全角字符串为半角字符串实例 说在后面: 1.应用领域: 全角和半角的转换通常用在自然语言处理过程中,由于全角和半角的不一致会导致信息抽取不一致,在使用语料训练语言模型会导致模型的效果不准确,所以需要统一. 2.全角半角转换概述 全角字符unicode编码范围从65281~65374 (对应的十六进制范围是: 0xFF01 ~ 0xFF5E) 半角字符un

  • 数组与List之间相互转换的方法详解

    1.List转换成为数组.(这里的List是实体是ArrayList) 调用ArrayList的toArray方法. toArray public T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组:返回数组的运行时类型就是指定数组的运行时类型.如果列表能放入指定的数组,则返回放入此列表元素的数组.否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组. 如果指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末尾的元素设

  • jQuery对象和DOM对象之间相互转换的方法介绍

    在讨论jQuery对象和DOM对象的相互交换之前,先约定好定义变量的风格.如果获取的对象是jQuery对象,那么在变量前加上$,例如: 复制代码 代码如下: var $variable = jQuery对象; 如果获取的是DOM对象,则定义如下: 复制代码 代码如下: var variable = DOM对象: 1.jQuery对象转成DOM对象 jQuery对象不能使用DOM中的方法,但是如果对jQuery对象所提供的方法不熟悉,或者jQuery没有封装想要的方法,不得不实用DOM对象的时候,

  • 简单实体类和xml文件的相互转换方法

    最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简单的模型,可以将简单的实体类和xml文件进行相互转换,但对实体类的属性类型有限制,目前只支持String, Integer, Double三种类型.但是后面可以扩展. 我的大概思路是这样的,只要能拿到实体类的类型信息,我就能拿到实体类的全部字段名称和类型,拼属性的set和get方法更是简单明了,这时

随机推荐