通过实例学C#之序列化与反序列化XmlSerializer类

简介

        可以将类序列化成xml文件,或者将xml文件反序列化成类对象,一般用于保存或加载项目参数。


构造函数

XmlSerializer()

        不使用函数创建一个xmlSerializer对象。


XmlSerializer(Type type)

        使用type对象创建一个xmlSerializer对象,注意,type必须为类,而不能是实例化的对象。

internal class Program
{
    static void Main(string[] args)
    {
        Person zhangSan = new Person("zhangSan", 30, "lawer");
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
    }
}

public class Person
{
    public string name;
    public int age;
    public string job;

    public Person() { }        //必须要有一个不带参数的构造函数,不然序列化时,会报错

    public Person(string name, int age, string job)
    {
        this.name = name;
        this.age = age;
        this.job = job;
    }
}

首先创建一个Person类,里面拥有name,age和job三个字段,后续会用到。


常用方法

Serialize (Stream stream, object  o)

        使用stream流,将实例对象o序列化。

static void Main(string[] args)
{
    Person zhangSan = new Person("zhangSan", 30, "lawer");
    XmlSerializer serializer = new XmlSerializer(typeof(Person));

    FileStream fs = new FileStream("test.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite);
    try
    {
        serializer.Serialize(fs, zhangSan);
        Console.WriteLine("序列化成功");
    }
    catch 
    {
        Console.WriteLine("序列化失败");
    }

    Console.ReadKey();
    ;
}

运行结果:
序列化成功

        当序列化成功后,打开项目所在文件夹中的debug文件夹,可以发现,新生成了一个test.xml文件。

打开一看,会发现Person实例zhangSan的三个字段值,已经被保存到xml文档中了。如果以后程序关闭再打开,只要xml文档存在,那么我们就能直接读取对象的三个字段,而不用重新赋值了,下面我们来学一下,怎么在程序开启时读取文件参数。


Deserialize (Stream stream)

        将流stream的信息,反序列化成实例对象。

static void Main(string[] args)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Person));
    if (File.Exists("test.xml"))       
    {
        FileStream fs = new FileStream("test.xml", FileMode.Open, FileAccess.Read);
        Person zhangSan=serializer.Deserialize(fs) as Person;
        Console.WriteLine("name:"+zhangSan.name);
        Console.WriteLine("age:"+zhangSan.age);
        Console.WriteLine("job:"+zhangSan.job);
    }
    else
    {
        Console.WriteLine("xml文档不存在");
    }

    Console.ReadKey();
    ;
}

运行结果:
name:zhangSan
age:30
job:lawer

相关推荐

  1. 序列序列

    2024-04-21 14:04:08       47 阅读
  2. 基于qt实现序列序列

    2024-04-21 14:04:08       48 阅读
  3. C++中序列序列

    2024-04-21 14:04:08       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 14:04:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 14:04:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 14:04:08       82 阅读
  4. Python语言-面向对象

    2024-04-21 14:04:08       91 阅读

热门阅读

  1. 修改Ubuntu的镜像源为阿里云镜像源

    2024-04-21 14:04:08       32 阅读
  2. Flask Web框架入门教程

    2024-04-21 14:04:08       36 阅读
  3. c语言数据结构之哈希表

    2024-04-21 14:04:08       36 阅读
  4. 第六章 二叉树 part02

    2024-04-21 14:04:08       41 阅读
  5. IoTDB数据库整合MyBatis实现SpringBoot项目CRUD

    2024-04-21 14:04:08       33 阅读
  6. python笔记之面向对象

    2024-04-21 14:04:08       39 阅读
  7. docker-compose搭建MongoDB

    2024-04-21 14:04:08       32 阅读
  8. 【QT进阶】Qt http编程之http与https简单介绍

    2024-04-21 14:04:08       42 阅读
  9. Gitea:轻量级全功能DevSecOps平台的深度解析

    2024-04-21 14:04:08       32 阅读