xml处理类 xmlAdapter

public static class XmlSerializeAdapter
   {
       public static T Deserialize<T>(XmlNode node) where T : class
       {
           return new XmlSerializer(typeof(T)).Deserialize(new XmlNodeReader(node)) as T;
       }

      

       public static IEnumerable<T> Deserialize<T>(XmlNodeList nodes) where T : class
       {
           List<T> results = new List<T>();
           XmlSerializer serializer = new XmlSerializer(typeof(T));
           foreach (XmlNode node in nodes)
           {
               results.Add(serializer.Deserialize(new XmlNodeReader(node)) as T);
           }
           return results;
       }

       public static object Deserialize(Type t, XmlNode node)
       {
           return new XmlSerializer(t).Deserialize(new XmlNodeReader(node));
       }

       public static IEnumerable<object> Deserialize(Type t, XmlNodeList nodes)
       {
           List<object> results = new List<object>();
           XmlSerializer serializer = new XmlSerializer(t);
           foreach (XmlNode node in nodes)
           {
               results.Add(serializer.Deserialize(new XmlNodeReader(node)));
           }
           return results;
       }

       public static object Deserialize(string type_name, XmlNode node)
       {
           return new XmlSerializer(Type.GetType(type_name)).Deserialize(new XmlNodeReader(node));
       }

       public static IEnumerable<object> Deserialize(string type_name, XmlNodeList nodes)
       {
           List<object> results = new List<object>();
           XmlSerializer serializer = new XmlSerializer(Type.GetType(type_name));
           foreach (XmlNode node in nodes)
           {
               results.Add(serializer.Deserialize(new XmlNodeReader(node)));
           }
           return results;
       }

       public static string Serialize(object o)
       {
           try
           {
               String XmlizedString = null; 

               MemoryStream memoryStream = new MemoryStream();
               XmlSerializer xs = new XmlSerializer(o.GetType());

               XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);

               xs.Serialize(xmlTextWriter, o);

               memoryStream = (MemoryStream)xmlTextWriter.BaseStream;

               XmlizedString = Utils.UTF8ByteArrayToString(memoryStream.ToArray());

               return XmlizedString;

           } 
           catch(Exception ex)
           {
               throw ex;
           }

       }

       public static T DeserializeInheritsObject<T, V>(XmlNode node)
           where T : class
           where V : class
       {
           XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
           XmlAttributes attrs = new XmlAttributes();

           // Creates an XmlElementAttribute to override the 
           // field that returns Book objects. The overridden field
           // returns Expanded objects instead.
           XmlElementAttribute attr = new XmlElementAttribute();
           attr.ElementName = typeof(T).Name;
           attr.Type = typeof(T);

           // Adds the XmlElementAttribute to the collection of objects.
           attrs.XmlElements.Add(attr);

           attrOverrides.Add(typeof(V), attrs);

           // Creates the XmlSerializer using the XmlAttributeOverrides.

           XmlSerializer xs = new XmlSerializer(typeof(T), attrOverrides);
           return xs.Deserialize(new XmlNodeReader(node)) as T;

       }

       public static string SerializeInheritsObject<T>(object o)
           where T : class
       {
           try
           {

               // Each overridden field, property, or type requires 
               // an XmlAttributes instance.
               XmlAttributes attrs = new XmlAttributes();

               // Creates an XmlElementAttribute instance to override the 
               // field that returns Book objects. The overridden field
               // returns Expanded objects instead.
               XmlElementAttribute attr = new XmlElementAttribute();
               attr.ElementName = o.GetType().Name;
               attr.Type = o.GetType();

               // Adds the element to the collection of elements.
               attrs.XmlElements.Add(attr);

               // Creates the XmlAttributeOverrides instance.
               XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();

               // Adds the type of the class that contains the overridden 
               // member, as well as the XmlAttributes instance to override it 
               // with, to the XmlAttributeOverrides.
               attrOverrides.Add(typeof(T), attrs);

               // Creates the XmlSerializer using the XmlAttributeOverrides.

               String XmlizedString = null;

               XmlSerializer xs = new XmlSerializer(o.GetType(), attrOverrides);

               MemoryStream memoryStream = new MemoryStream(); ;

               XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);

               xs.Serialize(xmlTextWriter, o);

               memoryStream = (MemoryStream)xmlTextWriter.BaseStream;

               XmlizedString = Utils.UTF8ByteArrayToString(memoryStream.ToArray());

               return XmlizedString;

           }
           catch(Exception ex)
           {

               throw ex;
           }

       }
   }
时间: 2024-11-03 20:49:12

xml处理类 xmlAdapter的相关文章

Android中Xml工具类的封装

Android中经常使用到操作XML,其中有一对XmlSerializer和XmlPullParser封装的很好,可是操作起来很复杂,虽然不难,但是感觉做了一点小事却写了一大堆的代码.有点烦,因此封装一下. 其思路为:根据传入的数据,获取字节码后进行反射解析,然后在存储.思路很简单,此demo只写了一个基本的List<T>类型的,其它类型道理与此大同小异,就当这个是抛砖引玉了. 对于一些Model可能有些字段是不需要序列化的,这里可以使用注解来操作 /** * XML操作工具类 * @auth

Java-封装生成JSON数据和XML数据类

1.背景 借鉴与php中 app接口的实现(php写app接口生成xml和json数据),封装了java版的json和xml数据操作类! 2.准备 在使用之前,需要引入 json 的jar 包:点我下载 ! 这里实现了,对象转json , 对象集合转json, 对象转xml,对象集合转xml ; 3.appUtil 工具类实现 具体的实现过程,我就不解释了,一边写,一边测试!直到写成为止! 里面的 tojsonArray() 方法 没有使用,可以删除,不过想生成json数组的 ,就不需要删除了!

C#常用操作类库三(XML操作类)

/// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { protected string strXmlFile; protected XmlDocument objXmlDoc = new XmlDocument(); public XmlHelper(string XmlFile) { // // TODO: 在这里加入建构函式的程序代码 // try { objX

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类

[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口IXmlSerializable实现XML序列化及XML通用类 本节导读:本节主要介绍通过序列化接口IXmlSerializable实现XML序列化和反序列化,整理了XML基础操作及序列化的通用类(包括XML及节点的基础读写操作,XML到DataSet\DataTable互转换操作,XML序列化及反序列化通用方法等). 读前必备: A.类和类的实例 [.net 面向对象编程基础]  (9) 类和类的

C#:XML操作类

写的一个XML操作类,包括读取/插入/修改/删除. using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlContro

使用反射和泛型,动态读取XML创建类实例并赋值

[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能.网上的例子倒也不少,但总是觉得缺点什么.比如读取xml文件之后该如何处理?看到的文章基本上都是手动创建一个目标类的实例,然后手动从读取的XML文件的内容中给刚才创建的目标类实例相关字段赋值.缺点什么呢?对嘞,感觉上

XML工具类 - XmlUtils.java

XML工具类,提供序列化XML.反序列化XML.获取指定节点的值的方法. 源码如下:(点击下载 - XmlUtils.java.dom4j-1.6.1.jar.xstream-1.4.7.jar ) 1 import org.dom4j.Document; 2 import org.dom4j.DocumentException; 3 import org.dom4j.DocumentHelper; 4 import org.dom4j.Element; 5 import com.thought

自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能.网上的例子倒也不少,但总是觉得缺点什么.比如读取xml文件之后该如何处理?看到的文章基本上都是手动创建一个目标类的实例,然后手动从读取的XML文件的内容中给刚才创建的目标类实例相关字段赋值.缺点什么呢?对嘞,感觉上不够简单和智能. 正所谓驱动科技发展的原因就是懒,为了使我们的小工具能够傻瓜到只需要

[C# | XML] XML 反序列化解析错误:&lt;xml xmlns=&#39;&#39;&gt; was not expected. 附通用XML到类解析方法

使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult result; XmlSerializer serializer = new XmlSerializer(typeof(TResult), new XmlRootAttribute("xml")); using (TextReader tr = new StringReader(xmlStri