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库的方法来实现。这两种方法都可以实现对象的序列化和反序列化,但在具体的场景中,选择哪种序列化方式取决于具体的需求,从而实现更好的效果。


相关文章
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
51 1
|
4月前
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
75 1
|
3月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
198 61
C# 中的 XML 与 JSON 数据处理
|
2月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
381 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
2月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
118 0
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
621 0
|
4月前
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
68 0
|
4月前
|
开发框架 前端开发 .NET
C# Newtonsoft.Json.Formatting DateTime 日期格式化
C# Newtonsoft.Json.Formatting DateTime 日期格式化
77 0
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。