using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Xml.Serialization;
/// <summary>
/// Xml序列化
/// </summary>
public static class XmlSerializerHelper
{
/// <summary>
/// 将对象序列化为Xml
/// </summary>
/// <typeparam name="T">对象实例对应的类.T的修饰符应当为Public</typeparam>
/// <param name="obj">对象实例</param>
/// <returns>序列化后的字符串</returns>
public static string ToXml<T>(this T obj)
{
if (obj == null) throw new NullReferenceException(); XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
} /// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xmlDocument"></param>
/// <returns></returns>
public static T ToInstanceFromXml<T>(this string xmlDocument)
{
using (StringReader reader = new StringReader(xmlDocument))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
var obj = serializer.Deserialize(reader);
if (obj is T)
{
return (T)obj;
} return default(T);
}
} /// <summary>
/// 将对象序列化为Xml
/// </summary>
/// <param name="obj">对象实例</param>
/// <returns>序列化后的字符串</returns>
public static string ToXml(this object obj)
{
return ToXml(obj, Encoding.UTF8);
} /// <summary>
/// 将对象序列化为Xml
/// </summary>
/// <param name="obj">对象实例</param>
/// <param name="encoding">编码格式</param>
/// <returns>序列化后的字符串</returns>
public static string ToXml(this object obj, Encoding encoding)
{
if (obj == null)
{
throw new ArgumentException("对象实例不能为空");
} if (encoding == null)
{
throw new Exception("编码不能为空");
} using (var stream = new MemoryStream())
{
var serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(stream, obj);
stream.Position = ;
return encoding.GetString(stream.ToArray());
}
} }

C#工具类之Xml序列化扩展类的更多相关文章

  1. ASP.NET 对类进行XML序列化和反序列化

    1 序列化方法 public void SerializeObject<T>(string Xmlname,T t) { XmlSerializer ser = new XmlSerial ...

  2. 类的XML序列化(XML Serialization)

    最近做的一个ASP.NET项目中,需要在一个页面中维护一个类的数组,在每次页面刷新的使其前一次的状态保持不变.开始错误的使用了static,导致了致命的共享错误.后来突然想起C#类能够使用XML序列化 ...

  3. C# XML序列化帮助类代码

    public static class XmlHelper { private static void XmlSerializeInternal(Stream stream, object o, En ...

  4. rest_framework视图基类与五个扩展类

    1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父类. AP ...

  5. GenericAPIView类与几个扩展类的综合使用

    五个扩展类 扩展类 作用 封装的方法 状态码(成功,失败) ListModelMixin 查询多条数据 list 200 CreateModelMixin 新增一条数据 create 201,400 ...

  6. C# XML序列化/反序列化类XmlSerializer使用示例

    using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...

  7. C# XML 序列化帮助类

    /// <summary> /// Xml helper class /// </summary> public static class XmlHelper { #regio ...

  8. .NET(C#):XML序列化时派生类的处理

    原文 www.cnblogs.com/mgen/archive/2011/12/03/2275014.html 目录 1. 针对基类的XmlSerializer序列化派生类 2. 类内成员是派生类的序 ...

  9. [Django REST framework - 视图组件之视图基类、视图扩展类、视图子类、视图集]

    [Django REST framework - 视图组件之视图基类.视图扩展类.视图子类.视图集] 视图继承关系 详图见文章末尾 视图组件可点我查看 两个视图基类:APIView.GenericAP ...

随机推荐

  1. HBase入门基础教程 HBase之单机模式与伪分布式模式安装

    在本篇文章中,我们将介绍Hbase的单机模式安装与伪分布式的安装方式,以及通过浏览器查看Hbase的用户界面.搭建HBase伪分布式环境的前提是我们已经搭建好了Hadoop完全分布式环境,搭建Hado ...

  2. SQL server 2008安装教程

    下载SQL server 2008 r2(网上资源很多,这里给出一个:安装) 解压后右键以管理员权限打开set-up 这里可能会出现问题:.net framework 3.5未安装,可以参考 快速安装 ...

  3. javascript的概述

    JavaScript是怎么诞生的???刚开始的是为了验证表单而开发出来的. 什么是JavaScript???a.面向对象的编程语言b.解释性的编程语言(说白了就是不用编译的一种语言)c.脚本语言(说白 ...

  4. Codeforces 1142B Lynyrd Skynyrd

    ---恢复内容开始--- 题意:给你一个排列p和数组a,有t组询问,每次询问一个区间的子序列中是否有p的一个循环排列. 思路:以p = [3, 1, 2]举例, 我们扫描数组b,假设当前数字是1,那么 ...

  5. dedecms出错此问题:Cannot_modify_header_information_-_headers_already_sent_by_(output_started_at

    修改php.ini文件,php.ini配置问题,解决办法:打开 php.ini 然后把 output_buffering 设为 on ,重启iis或apache即可. 出现以上问题可能是由于更换空间, ...

  6. bzoj4619 4619: [Wf2016]Swap Space

    传送门 分析 首先不难想到我们要先处理容量变大的再处理容量变小的 对于第一种情况我们自然要选择x小的先格式化,因为这个样暂时存储所需空间较小,可以使得情况更优 而第二种情况y先考虑,因为这样对总空间的 ...

  7. p3253 [JLOI2013]删除物品

    传送门 分析 我们发现两个栈可以看作一个数组,而栈顶则是将这个数组拆成两个栈的分割点. 于是每次移动就变成了分割点的移动,每次移动时都统计下目的分割点和当前分割点之间的物品数目即可. 代码 #incl ...

  8. WordCount编码与测试

    1. github项目地址:https://github.com/wwwwu/WordCount 2.PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning ...

  9. Java的get请求-----接口测试

    package findyou.Interface; import java.net.HttpURLConnection; import java.net.URL; public class URLC ...

  10. Arcgis android 10.2安装方法

    请仔细对照博文做!!! 将arcgis android 10.2的压缩包解压 arcgis android 10.2下载地址http://pan.baidu.com/s/1sj2LKO9 Help-& ...