C#工具类之Xml序列化扩展类
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序列化扩展类的更多相关文章
- ASP.NET 对类进行XML序列化和反序列化
1 序列化方法 public void SerializeObject<T>(string Xmlname,T t) { XmlSerializer ser = new XmlSerial ...
- 类的XML序列化(XML Serialization)
最近做的一个ASP.NET项目中,需要在一个页面中维护一个类的数组,在每次页面刷新的使其前一次的状态保持不变.开始错误的使用了static,导致了致命的共享错误.后来突然想起C#类能够使用XML序列化 ...
- C# XML序列化帮助类代码
public static class XmlHelper { private static void XmlSerializeInternal(Stream stream, object o, En ...
- rest_framework视图基类与五个扩展类
1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父类. AP ...
- GenericAPIView类与几个扩展类的综合使用
五个扩展类 扩展类 作用 封装的方法 状态码(成功,失败) ListModelMixin 查询多条数据 list 200 CreateModelMixin 新增一条数据 create 201,400 ...
- C# XML序列化/反序列化类XmlSerializer使用示例
using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...
- C# XML 序列化帮助类
/// <summary> /// Xml helper class /// </summary> public static class XmlHelper { #regio ...
- .NET(C#):XML序列化时派生类的处理
原文 www.cnblogs.com/mgen/archive/2011/12/03/2275014.html 目录 1. 针对基类的XmlSerializer序列化派生类 2. 类内成员是派生类的序 ...
- [Django REST framework - 视图组件之视图基类、视图扩展类、视图子类、视图集]
[Django REST framework - 视图组件之视图基类.视图扩展类.视图子类.视图集] 视图继承关系 详图见文章末尾 视图组件可点我查看 两个视图基类:APIView.GenericAP ...
随机推荐
- 第一个Dockerfile
1. 创建docker目录 $ mkdir docker && cd docker 2. 编写Dockerfile $ vim Dockerfile [docker/Dockfile] ...
- IE双边距bug
标准参考 根据 W3C CSS2.1 规范中的描述,对于非替换的浮动元素,若 'margin-left' 或 'margin-right' 特性的计算值为 'auto',则它们的实际使用值为 '0'. ...
- Nginx --Windows下和Linux下搭建集群小记
nginx: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 特点: 反向代理 负载均衡 动静分离... 反向代理 : 先来了解正向代理:需要我们用户 ...
- 【摘自张宴的"实战:Nginx"】nginx模块开发
Nginx的模块不能够像Apache那样动态的加载,所以模块都要预先编译进Nginx的二进制可执行文件中. Nginx的模块有三种角色: 1. Handler(处理模块) 用于处理Http请求 ...
- 杭电acm 1076题
水题,一个求闰年的题目,复习一下闰年的求法.... 1,如果能被4整除但不能被100整除的是闰年 2,能被400整除的是闰年 题目大意是:给定一个开始年份T以及一个正数N,要求求出从T开始,到了哪一年 ...
- 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-002如何改进算法
1. package algorithms.analysis14; import algorithms.util.In; import algorithms.util.StdOut; /******* ...
- python3-深浅复制
# Auther: Aaron Fan names = ["aaron", "alex", "james", "meihengfa ...
- WordCountPro小程序
WordCountPro小程序 基本任务 1.githu地址 https://github.com/JarrySmith/WordCountPro 2.psp2.1表 PSP2.1 PSP阶段 预 ...
- Eclipse报错could not write metadata for '/remotesystemstempfiles'
1. windows-Preferences 中,在search中输入remote,取消选中reopen remote systems view to previous state'. 2. win ...
- [学习笔记]_exit和exit深入理解
#include<stdio.h> #include<stdlib.h> #include<string.h> #include <unistd.h> ...