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. 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ

    本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...

  2. VS2013编译libcurl

    首先从这里下载libcurl的package: http://curl.haxx.se/libcurl/ 然后解压,里面有个winbuild文件夹,这里是为windows构建工程的文件夹.里面有nma ...

  3. Spring MVC 如何防止XSS、SQL注入攻击

    在Web项目中,通常需要处理XSS,SQL注入攻击,解决这个问题有两个思路: 在数据进入数据库之前对非法字符进行转义,在更新和显示的时候将非法字符还原 在显示的时候对非法字符进行转义 如果项目还处在起 ...

  4. 难得一见的HTML5动画欣赏及源码下载

    今天要给大家分享一些很酷的HTML5动画演示,并且提供源代码的下载.大部分HTML5动画都是通过canvas实现,当然也有基于SVG的,尤其是第一个,看起来很简单,但是创意却不错. 1.HTML5梦幻 ...

  5. Havel定理

    先贴一个百度百科的注释 Havel定理编辑 本词条缺少概述.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 中文名 Havel定理 外文名 Canisters theorem 特    ...

  6. 抓取“矢量”的实时交通流量数据

    1. 引言 最近老师有一个需求,就是想要抓取实时的矢量交通流量数据来做分析,类似于百度地图,高德地图的"实时路况"那种.平时的网络抓取工作一般是抓取网页上现成的数据,但是交通流量数 ...

  7. Tomcat类加载器

    1JVM类加载机制   JVM的ClassLoader通过Parent属性定义父子关系,可以形成树状结构.其中引导类.扩展类.系统类三个加载器是JVM内置的. 它们的作用分别是: 1)引导类加载器:使 ...

  8. mysql中的unique

    distinct可以把重复的行去掉,查询时候用select distinct * from ...; unique在MySQL中是完整性约束里的一种,如果某列的值需要是唯一的那么就添加UNIQUE约束 ...

  9. JS截取字符串方法

    function textSubstr(str,sub_length){ str = str.trim(); var temp1 = str.replace(/[^\x00-\xff]/g," ...

  10. js中setTimeout/setInterval定时器用法示例

    js中setTimeout(定时执行一次)和setInterval(间隔循环执行)用法介绍. setTimeout:在指定的毫秒数后调用指定的代码段或函数:setTimeout示例代码 functio ...