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

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

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

方法一:

序列化:

[csharp] view plain copy

  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. }

反序列化:

[csharp] view plain copy

  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. }

方法二:

[csharp] view plain copy

  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 );

时间: 2024-10-22 21:19:47

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

java序列化之后,对象的引用关系?

今天写代码的时候用到序列化,不过突然想到这个问题. 于是写了一些测试代码,得出两个结论. 如果两个对象存在引用关系,比如A引用B. 如果两个对象是各自序列化的,则引用关系不再存在. 如果两个对象是是另一个类对象C的成员,序列化C,反序列化C之后,A和B的引用关系还存在. 我就是做了这个两个实验. 1 node2引用了node1,node2.parent=node1, 序列化和反序列化之后, 发现node2.parent !=node1. node2.parent 指向的内存跟node1不同,而是

C#序列化多个对象到单个文件

特定的情况下,可能需要将多个对象保存到文件中.在网上找了一阵,没发现专门说这个问题的.在博问看到了一个相关的问题和回答,整理了一下.以下是我的一个简单实现: //测试用于保存的类 [Serializable] class TestToSerizable { int i; string b; public TestToSerizable(int i, string b) { this.i = i; this.b = b; } } class Program { static void Main(s

Msgpack序列化及反序列化对象

MessagePack是一个基于二进制高效的对象序列化类库,可用于跨语言通信.它可以像JSON那样,在许多种语言之间交换结构对象:但是它比JSON更快速也更轻巧.支持Python.Ruby.Java.C/C++等众多语言.比Google Protocol Buffers还要快4倍. 代码地址:https://github.com/msgpack/msgpack 官网地址:http://msgpack.org/ MessagePack的优势是速度比较快,支持众多语言,便于不同语言开发的系统之间交换

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

前言: 最近在做用户注册的时候,遇到了需要填写很多表单数据,不可能在一页把所有的数据都展示完全,因此采用了分页的方式,由于在用户填写数据数据之后我们需要对用户填写的数据进行暂时的记录的,当用户会到此页时,还能查看和修改.刚开始解决这个问题我们一定会从数据的大小的角度来解决,于是就有以下几种方式: A.运用临时静态变量static来保存到内存中                               B.运用SharedPreferences来保存                       

利用ObjectInputStream、ObjectOutputStream序列化多个对象

内容:序列化多个对象,利用一个容器存储你要序列化的多个对象. class Student implements java.io.Serializable{ private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } pub

ServletContext对象(每个工程只有一个此对象)

一]重点方法:        1>存取对象                        void setAttribute(String name, Object object);//将object存入ServletContext对象中,并取名为name(方便取出,与Map类似)                        Object getAttribute(String name);//获取name对应的对象        2>解析web.xml中<context-param&

(一)数组或对象中最会一个属性是否该加逗号的测试

1.结论:在IE8中有兼容问题.会将逗号后面的空也算作一个属性,所以最后一个属性末不要加逗号 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> <script src="lib

使用eval()将json字符串转换为对象要多加一个小括号

使用eval()将json字符串转换为对象要多加一个小括号:关于eval()函数的具体用法这里就不多介绍了,具体可以参阅javascript的eval()方法一章节,下面就介绍一下为什么使用eval()函数将json格式字符串转换为对象的时候,需要多嵌套一层小括号,下面就介绍一下它的原因,希望能够对需要的朋友带来帮助.先看一段转换代码: var jsonStr='{"webName":"蚂蚁部落","webAddress":"青岛市南区

一个显示Grid的VBScript对象

是根据MS提供的代码修改而成,目前还不支持编辑,可以排序.查询.分页显示 <%@ Language=VBScript %> <% Option Explicit %> <% Class classDataGrid Private m_strSQL Private m_strConn Private m_strRowColor1 Private m_strRowColor2 Private m_strMode Private m_strProcessPage Private m