C# 中使用 XmlSerializer 实现类和xml文件的序列化和反序列化,使用起来非常简单。

C# XmlSerializer实现序列化:

XmlSerializer xml = new XmlSerializer(typeof(ClassName));

FileStream fs = new FileStream(@"d:\t.xml",FileMode.Create);

xml.Serialize(fs, new Class());

fs.Close();

C# XmlSerializer实现反序列化

FileStream fs = new FileStream(@"d:\t.xml", FileMode.Open);

XmlSerializer xml = new XmlSerializer(typeof(ClassName));

ClassName t = (ClassName)xml.Deserialize(fs);

C# XmlSerializer类与主流的序列化类的几个不同点是:

1、不需要Serializable属性,使用XmlIgnore属性标记不需要序列化的属性。

2、该类不能安全地访问私有变成员,所以学要将私有成员改为公共成员,或者提供合适的公共特性。

3、要求被序列化的类要有一个默认的构造器。

下面上个实例,直接上代码:

1、需要序列化的类

[XmlRoot("Person")]
public class Person
{
  [XmlElement("name")]
  public string Name { get; set; }

  [XmlAttribute("sex")]
  public byte Sex { get; set; }

  [XmlAttribute("age")]
  public int Age { get; set; }

  [XmlText]
  public string Description { get; set; }

  [XmlElement("child")]
  public List<Person> Childrens { get; set; }

  [XmlElement("childlist")]
  public ChildList ChildList { get; set; }
}

请注意红色标注的属性,生成的xml文件是不一样的^_^

[XmlRoot("Childs")]
public class ChildList
{
  [XmlElement("person")]
  public List<Person> Childs { get; set; }
}

2、声明对象

Person person = new Person { Name="张三", Sex=1, Age=25, Description="我是一名中国人!!" };
person.Childrens = new List<Person>();
person.Childrens.Add(new Person { Name="Boy", Sex=1, Age=5, Description="我是男孩" });
person.Childrens.Add(new Person { Name="Girl", Sex=0, Age=10, Description="我是女孩" });

person.ChildList = new ChildList();
person.ChildList.Childs = new List<Person>();
person.ChildList.Childs.Add(new Person { Name = "Jon", Sex = 1, Age = 5 });
person.ChildList.Childs.Add(new Person { Name = "KG", Sex = 0, Age = 10 });

3、序列化

string path = System.AppDomain.CurrentDomain.BaseDirectory;
using (FileStream fs = new FileStream(path + "parson.xml", FileMode.Create))
{
  serializer.Serialize(fs, person);
  fs.Close();
}

4、反序列化

using (FileStream fs = new FileStream(path + "parson.xml", FileMode.Open))
{
  person = (Person)serializer.Deserialize(fs);
  fs.Close();
}

C# XmlSerializer序列化浅析的更多相关文章

  1. .NET调用外部接口将得到的List数据,并使用XmlSerializer序列化List对象成XML格式

    BidOpeningData.BidSupervisionSoapClient client = new BidOpeningData.BidSupervisionSoapClient(); Dict ...

  2. XmlSerializer序列化

    XmlSerializer在命名空间using System.Xml.Serialization下. 序列化和反序列化的代码: using System.IO; using System.Xml; u ...

  3. C# XmlSerializer实现序列化浅析

    C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况. C# XmlSeriali ...

  4. C#中XmlSerializer实现序列化浅析

    C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况. C# XmlSeriali ...

  5. 使用XmlSerializer序列化可空属性

    使用XmlSerializer可以方便的将对象序列化为xml,实现应用之间的数据交互.但是XmlSerializer却不能很好地序列化类型中的可空字段. 例如,有如下定义的类Person: [Seri ...

  6. 学习C# XmlSerializer 序列化反序列化XML

    类.变量常用头: [XmlRootAttribute]:对根节点的描述,在类声明中使用 如:下例的Html类 [XmlType]:对节点描述,在类声明中使用         如:下例的Head类 [X ...

  7. C#调用XmlSerializer序列化时生成CDATA节点解决方法

    public class Person{    public string Name { get; set; }    public int Age { get; set; }        } 引用 ...

  8. C# 派生类的XmlSerializer序列化XML

    近段对XML 序列化进行处理,用XmlSerializer这个挺好用的. 但是对于派生类对象的XML的生成总会报错.因为同一个节点名称,不能反射为不同的对象.这个在网上找了好久,都说要利用反射来处理. ...

  9. JAVA序列化浅析

    java.io.Serializable浅析 Java API中java.io.Serializable接口源码: 1 public interface Serializable { 2 } 类通过实 ...

随机推荐

  1. iOS开发——C篇&动态内存分析

    再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数(堆 ...

  2. BestCoder Round #36 [B] Gunner

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5199 先对树的高度排序,然后对每次射击高度二分查找即可,打过之后数目变为0. #include< ...

  3. 转:CFile::Seek

    CFile::Seek virtual LONG Seek(LONG lOff,UINT nFrom);  throw(CFileException); 返回值:如果要求的位置合法,则Seek返回从文 ...

  4. cf D. Broken Monitor

    http://codeforces.com/contest/370/problem/D 题意:输入一张图,上面只有两个字符'w'和‘.’ ,如果可以用一个正方形把所有的‘w’围起来,所有的‘w’都在正 ...

  5. LINUX下为LVM磁盘增加硬盘空间

    总结: ~~~~~~~~~~~~~~~~~~~~ fdisk -lpvcreate /dev/sdbvgextend VolGroup /dev/sdblvextend -L +180G /dev/m ...

  6. I2C的读写操作实验

    [实验任务]   利用24C08断电以后存储的数据不消失的特点,可以做一个断电保护装置.首先利用单片机做一个0-99秒的自动计时器.然后随机关断电源,在 通电以后计时器接着断电前的状态继续计时. [实 ...

  7. 一本QT书,连接MySQL图文并茂

    http://qtdebug.com/index.html http://qtdebug.com/DB-AccessMySQL.html

  8. rsyslog 直接kill进程,在重新启动会全部发送日志

    <pre name="code" class="html">jrhapt11:/root# ps -ef | grep rsyslog root 8 ...

  9. Android 应用框架 —— 组件

    本文内容根据个人自学整理记录,理解不当之处,希望大家批评指正,大家相互学习,写学习归纳,写博客是个好习惯,希望能够坚持下去. 在前一篇文章当中介绍了Android 的系统框架,主要是为了让大家对And ...

  10. cf581D Three Logos

    Three companies decided to order a billboard with pictures of their logos. A billboard is a big squa ...