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序列化浅析,码迷,mamicode.com

时间: 2024-10-25 16:14:36

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

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

BidOpeningData.BidSupervisionSoapClient client = new BidOpeningData.BidSupervisionSoapClient(); Dictionary<string, string> param = new Dictionary<string, string>(); param.Add(CommonParam.ConnKey, DBConnHelper.GetConnectionKey(DBConnHelper.Busi

XmlSerializer序列化小结

XmlSerializer在命名空间using System.Xml.Serialization下. 序列化和反序列化的代码: using System.IO; using System.Xml; using System.Xml.Serialization; namespace ConsoleApplication1 { public class PublicFunction { //序列化到XmlNode public static void Serialize<T>(T t, out X

C# XmlSerializer实现序列化浅析

C# XmlSerializer的出处: using System.Xml.Serialization; C# XmlSerializer实现序列化: XmlSerializer xml = new XmlSerializer(typeof(Test)); FileStream fs = new FileStream(@"c:\t.xml",FileMode.Create); xml.Serialize(fs, t); fs.Close(); C# XmlSerializer实现反序列

C#中XmlSerializer实现序列化浅析

C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况. C# XmlSerializer是什么呢?它是使用二进制格式化程序进行序列化的一个类,那么具体的通过C# XmlSerializer如何实现序列化操作呢?在序列化操作的过程中需要注意些什么呢? C# XmlSerializer的出处: using System.Xml.Serialization; C# XmlSeriali

JAVA序列化浅析

java.io.Serializable浅析 Java API中java.io.Serializable接口源码: 1 public interface Serializable { 2 } 类通过实现java.io.Serializable接口可以启用其序列化功能.未实现次接口的类无法使其任何状态序列化或反序列化.可序列化类的所有子类型本身都是可序列化的.序列化接口没有方法或字段,仅用于标识可序列化的语义. Java的"对象序列化"能让你将一个实现了Serializable接口的对象

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

public class Person{    public string Name { get; set; }    public int Age { get; set; }        } 引用内容 <?xml version="1.0"?><Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置

这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对象如果需要传递给其他系统使用:或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化. 范围:本文只介绍xml序列化,其实序列化可以是二进制的序列化,也可以是其他格式的序列化. 看一段最简单的Xml序列化代码 1 2 3 4 5 6 7 8 9 10 11 12 class Prog

C# XmlSerializer 对象的Xml序列化和反序列化

.Net程序执行时,对象都驻留在内存中:内存中的对象如果需要传递给其他系统使用:或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化. System.Xml.Serialization命名空间中有一系列的特性类,用来控制复杂类型序列化.例如XmlElementAttribute.XmlAttributeAttribute.XmlArrayAttribute.XmlArrayItemAttribute.XmlRootAttribute等等. 可以使用XmlElement指定属性序

C#编程总结(一)序列化

C#编程总结(一)序列化 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 几种序列化技术:      1)二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用.例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象.您可以将对象序列化到流.磁盘.内存和网络等等.远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象.      2)XML 序列化仅序列化公共属性和