序列化是将对象保存为文本文件或二进制文件;

反序列化则是读取文件信息,还原为对象;

序列化保存为文本内容,主要是 xml 和 json 两种,这里介绍序列化为 xml 文件的方式。

想要序列化,先要在类上添加 [Serializable] 特性标签,如:

    [Serializable]
public class Person {
private string test1 = "test1";
protected string test2 = "test2";
public string test3 = "test3";
internal string test4 = "test4";
public int id { get; set; }
public string name { get; set; }
public int age { get; set; } public override string ToString() {
return $"[id={id}, name={name}, age={age}, test1={test1}, test2={test2}, test4={test3}, test4={test4}]";
}
}

C# 中处理 xml 序列化的相关类都在 System.Xml.Serialization 命名空间下,这里通过使用 XmlSerializer 类来实现序列化和反序列化:

public class xml_serializer_manager{
/// <summary>
/// serialize object to xml file.
/// </summary>
/// <param name="path">the path to save the xml file</param>
/// <param name="obj">the object you want to serialize</param>
public void serialize_to_xml(string path, object obj) {
XmlSerializer serializer = new XmlSerializer(obj.GetType());
string content = string.Empty;
//serialize
using (StringWriter writer = new StringWriter()) {
serializer.Serialize(writer, obj);
content = writer.ToString();
}
//save to file
using (StreamWriter stream_writer = new StreamWriter(path)) {
stream_writer.Write(content);
}
} /// <summary>
/// deserialize xml file to object
/// </summary>
/// <param name="path">the path of the xml file</param>
/// <param name="object_type">the object type you want to deserialize</param>
public object deserialize_from_xml(string path, Type object_type) {
XmlSerializer serializer = new XmlSerializer(object_type);
using (StreamReader reader = new StreamReader(path)) {
return serializer.Deserialize(reader);
}
}
}

使用方法:

序列化:

xml_serializer_manager manager = new xml_serializer_manager();
string path = @"D:\person.xml";
Person p = new Person { id=, name="tommy", age=};
manager.serialize_to_xml(path, p);

结果如下:

生成 person.xml 文件,而且只处理了 public 修饰的属性,其他都不处理

反序列化:

xml_serializer_manager manager = new xml_serializer_manager();
string path = @"D:\person.xml";
Person p = (Person)manager.deserialize_from_xml(path, typeof(Person));
Console.Write(p.ToString());

结果:

C# 序列化和反序列化(xml 文件)的更多相关文章

  1. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  2. 使用XMl序列化器生成xml文件

    生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append(&q ...

  3. JAVA序列化和反序列化XML

    package com.lss.utils; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.Bu ...

  4. Android 使用xml序列化器生成xml文件

    在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...

  5. 对类参数的序列化和反序列化XML

    /// <summary> /// Xml序列化与反序列化 /// </summary> public class XmlUtil { #region 反序列化 /// < ...

  6. Java序列化与反序列化,文件操作

    参考两篇博客: http://blog.csdn.net/moreevan/article/details/6697777 http://blog.csdn.net/moreevan/article/ ...

  7. Android -------- 序列化器生成xml文件

  8. c#如何序列化与反序列化json文件

    见网站: http://www.json.org/ 代码如下: /* * Copyright (c) 2013 Calvin Rien * * Based on the JSON parser by ...

  9. unity xml序列化与反序列化 多平台

    换平台确实是一个头疼的问题,本来在pc用.net的json处理数据很是顺手的,但是发布web版本后,发现他不支持.后面找了好几个开源json都不能很好的支持web,或者不能支持List等.于是我就想着 ...

随机推荐

  1. B.Box

    题目:盒子 题目:排列p是一个整数序列 p = [p1, p2,...,pn],由n个唯一的正整数组成 唯一的线索是你需要打开上锁的盒子 你只知道前缀的最大数,q1, q2, ..., qn,保证qi ...

  2. nessus安装、msfconsole辅助模块使用(网安全实训第三天)

    本期内容:nessus安装.msfconsole辅助模块使用.后渗透攻击 1. nessus安装 2.msfconsole辅助模块使用 3.后渗透攻击 1. nessus安装 (1)下载nessus ...

  3. JAVA可视化闹钟源码

    概述 一些同学的Java课设有这样一个问题,比较感兴趣就做了一下 功能介绍: 1.可增加闹钟 2.可删除闹钟 3.时间到了响铃 4.关闭闹钟不会丢失闹钟(因为闹钟存储在txt文件中,不会因程序关闭就终 ...

  4. Python爬虫基础——re模块的提取和匹配

    re是Python的一个第三方库. 为了能更直观的看出re的效果,我们先新建一个HTML网页文件(可直接复制): index.html <!DOCTYPE html> <html l ...

  5. Linux下如何编辑pdf文件目录

    目前,我使用的是系统LinuxMint,之前硬盘没坏时都是用Foxit Reader和Okular查看pdf文件,可是后来发现Foxit Reader十分吃CPU,而且现在换了固态硬盘之后只有120G ...

  6. 2016/10/13 oracle中的round()

    语法: ROUND(number,num_digits) 其中Number是需要进行四舍五入的数字:Num_digits为指定的位数,按此位数进行四舍五入,如果 num_digits 大于 0,则四舍 ...

  7. Table实现表头固定 内容滚动

    <div style="width: 800px;"> <div class="table-head"> <table> & ...

  8. 03-EF Core笔记之查询数据

    EF Core使用Linq进行数据查询. 基本查询 微软提供了一百多个示例来演示查询,地址:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb98 ...

  9. 重构 JAVA 聊天室 —— CS 模式的简单架构实现

    前言 自从开始弄起数据挖掘之后,已经很久没写过技术类的博客了,最近学校 JAVA 课设要求实现一个聊天室,想想去年自己已经写了一个了,但是有些要求到的功能我也没实现,但看着原有的代码想了想加功能好像有 ...

  10. SAP QM 主检验特性主数据关键字段解释

    SAP QM 主检验特性主数据关键字段解释 检验特征是QM模块中的一项重要主数据,可以说是QM检验业务的构成基础,它通过体现在Task list (检验任务清单)和/或material specifi ...