c#XML、JSON的序列化和反序列化,看完你就懂了

简介: c#XML、JSON的序列化和反序列化,看完你就懂了

序列化和反序列化是C#编程中非常常见的概念,这两个概念在面向对象编程中起着至关重要的作用,可以实现对象的持久化存储和传输。本篇文章将为大家详细介绍C#中的序列化和反序列化,并分别阐述XML和Json两种格式的序列化和反序列化的实现方式。


一、序列化的概念


序列化是指将数据结构或对象转换为一组字节,以便可以将其存储在磁盘或在网络上传输,然后在需要的时候重新创建相同的数据结构或对象。简单来说,序列化就是将一个对象转换成字节流或者XML文本格式。


二、序列化的实现


C#中所使用的序列化和反序列化的方法,包含两种格式:XML和Json。


  1. XML序列化和反序列化

在 C# 中,可以使用 System.Xml.Serialization 命名空间中的 XmlSerializer 类来进行 XML 格式的序列化和反序列化。


1.1 XML序列化

使用 XML 序列化器将对象序列化为 XML 文档,首先需要定义要序列化的类或结构体,然后使用 XmlSerializer 类的 Serialize() 方法将其序列化为 XML 文档。示例代码如下:


using System;
using System.Xml.Serialization;
using System.IO;
 
[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        Person person = new Person() { Name = "Tom", Age = 20 };
 
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
 
        using (TextWriter writer = new StreamWriter(@"D:\person.xml"))
        {
            serializer.Serialize(writer, person);
        }
    }
}


1.2 XML反序列化

使用 XML 序列化器将 XML 文档反序列化为对象,首先需要使用 XmlSerializer 类的 Deserialize() 方法将 XML 文档反序列化为对象。示例代码如下:

using System;
using System.Xml.Serialization;
using System.IO;
 
[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
 
        using (FileStream fileStream = new FileStream(@"D:\person.xml", FileMode.Open))
        {
            Person person = serializer.Deserialize(fileStream) as Person;
            Console.WriteLine("Name: " + person.Name);
            Console.WriteLine("Age: " + person.Age);
        }
    }
}


在上述代码段中,使用文件流读取 XML 文档,然后反序列化为 Person 类型的对象,最后输出 Name 和 Age 属性的值。


  1. Json序列化和反序列化

在C#中,可以使用 Newtonsoft.Json 库提供的 JsonConvert 类来进行Json格式的序列化和反序列化。


2.1 Json序列化

使用Json序列化器将对象序列化为Json文档,首先需要定义要序列化的类或结构体,然后使用 JsonConvert 类的 SerializeObject() 方法将其序列化为 Json 文档。示例代码如下:

using Newtonsoft.Json;
using System;
 
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        Person person = new Person() { Name = "Tom", Age = 20 };
 
        string json = JsonConvert.SerializeObject(person);
 
        Console.WriteLine("Json: " + json);
    }
}


在上述代码段中,使用 JsonConvert.SerializeObject()方法将Person 类对象序列化为Json格式,最后输出Json字符串到控制台。


2.2 Json反序列化


使用Json序列化器将Json文档反序列化为对象,首先需要使用 JsonConvert 类的 DeserializeObject() 方法将 Json 文档反序列化为对象,然后将反序列化后的对象转换为指定的类型。示例代码如下:

using Newtonsoft.Json;
using System;
 
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        string json = "{ Name:'Tom', Age:20 }";
 
        Person person = JsonConvert.DeserializeObject<Person>(json);
 
        Console.WriteLine("Name: " + person.Name);
        Console.WriteLine("Age: " + person.Age);
    }
}


在上述代码段中,JsonConvert.DeserializeObject()方法实现反序列化,将Json字符串转换为Person类型对象,最后输出Name和Age属性的值。


三、总结


C#中的序列化和反序列化是实现持久化存储和网络传输的关键手段。XML序列化和反序列化采用XmlSerializer类的方法实现,Json序列化和反序列化采用Newtonsoft.Json库的方法来实现。这两种方法都可以实现对象的序列化和反序列化,但在具体的场景中,选择哪种序列化方式取决于具体的需求,从而实现更好的效果。


相关文章
|
5天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
23 2
|
5天前
|
JSON 编译器 Go
Golang深入浅出之-结构体标签(Tags):JSON序列化与反射应用
【4月更文挑战第22天】Go语言结构体标签用于添加元信息,常用于JSON序列化和ORM框架。本文聚焦JSON序列化和反射应用,讨论了如何使用`json`标签处理敏感字段、实现`omitempty`、自定义字段名和嵌套结构体。同时,通过反射访问标签信息,但应注意反射可能带来的性能问题。正确使用结构体标签能提升代码质量和安全性。
19 0
|
5天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
59 1
|
5天前
|
存储 JSON JavaScript
Python中的JSON与Pickle模块:数据序列化和反序列化的利器
在Python编程中,数据的序列化和反序列化是经常遇到的操作。序列化是将数据结构或对象状态转换为可以存储或传输的格式的过程,而反序列化则是这个过程的逆操作,即将序列化的数据重新转换回原来的数据结构或对象状态。Python中的JSON和Pickle模块就是实现数据序列化和反序列化的强大工具。
|
5天前
|
存储 C#
C#中的序列化和反序列化案例
C#中的序列化和反序列化案例
17 0
|
5天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
25 0
|
5天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
42 0
|
5天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
5天前
|
SQL
Mybatis.xml文件中大于小于等于
Mybatis.xml文件中大于小于等于
12 0
|
5天前
|
XML 关系型数据库 MySQL
【Mysql】有关数据库中一对多/一对一,多对一xml中文件映射问题
【Mysql】有关数据库中一对多/一对一,多对一xml中文件映射问题
20 0

热门文章

最新文章

http://www.vxiaotou.com