原文:http://blog.csdn.net/otong/article/details/7894059

序列化或反序列化成一个字符串:

方法一:

序列化:

  1. public static string XMLSerialize<T>(T entity)
  2. {
  3. StringBuilder buffer = new StringBuilder();
  4. XmlSerializer serializer = new XmlSerializer(typeof(T));
  5. using (TextWriter writer = new StringWriter(buffer))
  6. {
  7. serializer.Serialize(writer, entity);
  8. }
  9. return buffer.ToString();
  10. }

反序列化:

  1. public static T DeXMLSerialize<T>(string xmlString)
  2. {
  3. T cloneObject = default(T);
  4. StringBuilder buffer = new StringBuilder();
  5. buffer.Append(xmlString);
  6. XmlSerializer serializer = new XmlSerializer(typeof(T));
  7. using (TextReader reader = new StringReader(buffer.ToString()))
  8. {
  9. Object obj = serializer.Deserialize(reader);
  10. cloneObject = (T)obj;
  11. }
  12. return cloneObject;
  13. }

方法二:

  1. /// <summary>
  2. /// 对象序列化成 XML String
  3. /// </summary>
  4. public static string XmlSerialize<T>(T obj)
  5. {
  6. string xmlString = string.Empty;
  7. XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
  8. using (MemoryStream ms = new MemoryStream())
  9. {
  10. xmlSerializer.Serialize(ms, obj);
  11. xmlString = Encoding.UTF8.GetString(ms.ToArray());
  12. }
  13. return xmlString;
  14. }
  15. /// <summary>
  16. /// XML String 反序列化成对象
  17. /// </summary>
  18. public static T XmlDeserialize<T>(string xmlString)
  19. {
  20. T t = default(T);
  21. XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
  22. using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
  23. {
  24. using (XmlReader xmlReader = XmlReader.Create(xmlStream))
  25. {
  26. Object obj = xmlSerializer.Deserialize(xmlReader);
  27. t = (T)obj;
  28. }
  29. }
  30. return t;
  31. }

如果要序列化到一个文件,则使用FileStream就可以了

如:

string strFile = @"c:/book.xml";
            using (FileStream fs = new FileStream(strFile, FileMode.Create))
            {
                XmlSerializer formatter = new XmlSerializer(typeof(T));
                formatter.Serialize(fs, entity);
            }

附:其实还可以直接用SringWriter

StringBuilder sb = new StringBuilder();
System.IO.StringWriter writer = new System.IO.StringWriter(sb);

XmlSerializer formatter = new XmlSerializer(typeof(T));
formatter .Serialize(writer,entity );

一个可序列化的C#对象,如何转成一个XML格式的文件或字符串【转】的更多相关文章

  1. 如何将excel中的一个表格内容转成xml格式的文件

    转自:http://www.cnblogs.com/sansi/archive/2012/02/06/2340471.html 感谢作者,解决了折磨我几天的问题,顿时心情开朗~ ----------- ...

  2. 将Java对象序列化成JSON和XML格式

    1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...

  3. 谁能在同一文件序列化多个对象并随机读写(反序列化)?BinaryFormatter、SoapFormatter、XmlSerializer还是BinaryReader

    谁能在同一文件序列化多个对象并随机读写(反序列化)?BinaryFormatter.SoapFormatter.XmlSerializer还是BinaryReader 随机反序列化器 +BIT祝威+悄 ...

  4. Android中SharedPreferences和序列化结合保存对象数据

    前言: 最近在做用户注册的时候,遇到了需要填写很多表单数据,不可能在一页把所有的数据都展示完全,因此采用了分页的方式,由于在用户填写数据数据之后我们需要对用户填写的数据进行暂时的记录的,当用户会到此页 ...

  5. redis采用序列化方案存对象

    前几天被问到这样一个问题,redis怎么存对象,平时也没怎么注意,只知道redis存字符之类的,不过就是根据键存取值,不过对象的话还是不同的 首先来了解一下为什么要实现序列化 为什么要实现序列化接口 ...

  6. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  7. JSON和XML格式与对象的序列化及反序列化的辅助类

    下面的代码主要是把对象序列化为JSON格式或XML格式等 using System; using System.Collections.Generic; using System.Globalizat ...

  8. 用非常硬核的JAVA序列化手段实现对象流的持久化保存

    目录 背景 对象流的概念 对象流实例 引入一张组织结构图 定义组织架构图的类 类的完整结构 用对象流保存组织架构的对象信息 核心代码 用对象流读取文件并输出 核心代码 总结 背景 在OOP(面向对象编 ...

  9. 如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?

    任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决. Java 序列化相关的常 ...

随机推荐

  1. LCS模板,求长度,并记录子串

    //LCS模板,求长度,并记录子串  //亦可使用注释掉的那些代码,但所用空间会变大 #include<iostream> #include<cstring> #include ...

  2. linux 查看局域网内ip

    $ sudo apt-get install nmap $ nmap -sP 192.168.1.1/24 windows 下直接arp -a就能看到.

  3. @QueryParam和@PathParam比较

    来源:http://jackyrong.iteye.com/blog/1128364 1 先来看@queryparam Path("/users") public class Us ...

  4. 【mongoDB中级篇①】游标cursor

    简述 通俗的说,游标不是查询结果,可以理解为数据在遍历过程中的内部指针,其返回的是一个资源,或者说数据读取接口. 客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量 ...

  5. 【mysql的编程专题③】内置函数

    数学函数 常用 abs(x) 返回x的绝对值 floor(x) 返回小于x的最大整数值 mod(x,y) 返回x/y的模(余数) rand() 返回0到1内的随机值,可以通过提供一个参数(种子)使ra ...

  6. jsp片段

    转载自:http://blog.csdn.net/lovejavaydj/article/details/7293145 使用jspf 在开发中写jsp页面时,通常都要通过如下方式在jsp文件头部引入 ...

  7. Java学习笔记之:Java数据类型的转换

    一.介绍 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受 ...

  8. 64位下好神奇啊(增加了PatchGuard技术保护自己,SSDT是相对地址,参数通过寄存器与rdi来传递)

    近期可能会有一个64位平台的驱动开发任务,找了些资料,对64位平台下的驱动开发略知一二了,好神奇. 一.在64位系统下,有一项PatchGuard技术,它是微软为了防止自己的代码被Patch,进而影响 ...

  9. *Linux之rpm命令

    在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比"添加/删除程序"强很多,它就是Red Hat Package Mana ...

  10. C++:对象指针

    对象指针概念:每一个对象在初始化后都会在内存中占有一定的空间.因此,既可以通过对象名访问, 也可以通过一个对象地址来访问一个对象.对象指针就是用于存放对象地址的变量. 声明对象指针的一般语法格式为:类 ...