C# XmlSerializer序列化浅析
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序列化浅析的更多相关文章
- .NET调用外部接口将得到的List数据,并使用XmlSerializer序列化List对象成XML格式
BidOpeningData.BidSupervisionSoapClient client = new BidOpeningData.BidSupervisionSoapClient(); Dict ...
- XmlSerializer序列化
XmlSerializer在命名空间using System.Xml.Serialization下. 序列化和反序列化的代码: using System.IO; using System.Xml; u ...
- C# XmlSerializer实现序列化浅析
C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况. C# XmlSeriali ...
- C#中XmlSerializer实现序列化浅析
C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况. C# XmlSeriali ...
- 使用XmlSerializer序列化可空属性
使用XmlSerializer可以方便的将对象序列化为xml,实现应用之间的数据交互.但是XmlSerializer却不能很好地序列化类型中的可空字段. 例如,有如下定义的类Person: [Seri ...
- 学习C# XmlSerializer 序列化反序列化XML
类.变量常用头: [XmlRootAttribute]:对根节点的描述,在类声明中使用 如:下例的Html类 [XmlType]:对节点描述,在类声明中使用 如:下例的Head类 [X ...
- C#调用XmlSerializer序列化时生成CDATA节点解决方法
public class Person{ public string Name { get; set; } public int Age { get; set; } } 引用 ...
- C# 派生类的XmlSerializer序列化XML
近段对XML 序列化进行处理,用XmlSerializer这个挺好用的. 但是对于派生类对象的XML的生成总会报错.因为同一个节点名称,不能反射为不同的对象.这个在网上找了好久,都说要利用反射来处理. ...
- JAVA序列化浅析
java.io.Serializable浅析 Java API中java.io.Serializable接口源码: 1 public interface Serializable { 2 } 类通过实 ...
随机推荐
- 有关mysql数据库的编码
今天在通过表单给php提交数据,然后插入到数据库中.网页与php的编码格式均为utf-8,在插入到数据库中时也设置了$this->query("set names utf8;" ...
- iOS中定时器NSTimer的使用-备用
1.初始化 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelect ...
- Top 100 words for advanced learners.
aberration (n.) something that differs from the norm (In 1974, Poland won the World Cup, but the suc ...
- MySQL 学习笔记 (它执行的步骤)
基本步骤是 : (不是很准,请看完这篇) 1.from 2.join on 3.where 4.group by 5.having 6.order by 7.select 8.distinct ,su ...
- 玩转Google开源C++单元测试框架Google Test系列(转载)
越来越多公司采用敏捷开发,单元和回归测试越来越重要,GTest作为最佳C++单元测试工具越来越多的被使用.转自 http://www.cnblogs.com/coderzh/archive/2009/ ...
- css属性之@media
Base Browsers: IE6.0+, Firefox2.0+, Chrome4.0+, Safari6.0+, Opera15.0+ <expression>:指定媒体查询使用的媒 ...
- 设计模式 ( 十七 ):Observer 观察者模式 -- 行为型
1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信.但是 ...
- BIND9源码学习笔记1---gdb调试篇
学习bind9源码之前,首先要知道如何用gdb来调试bind.BIND9的源码我是先看代码弄懂它的架构,像什么event-drive,epoll等, 再去看它的业务流程.看业务流程的时候要追踪它的数据 ...
- 运营总监招聘-e袋洗招聘-拉勾网
运营总监招聘-e袋洗招聘-拉勾网 运营总监
- 抓取“矢量”的实时交通流量数据
1. 引言 最近老师有一个需求,就是想要抓取实时的矢量交通流量数据来做分析,类似于百度地图,高德地图的"实时路况"那种.平时的网络抓取工作一般是抓取网页上现成的数据,但是交通流量数 ...