在C#中,序列化和反序列化数据是非常常见的操作。序列化是将一个对象转换为可存储或传输的形式,而反序列化则是将序列化的数据重新转换为对象。C#提供了多种序列化和反序列化的方式,本文将重点介绍JSON、XML和二进制格式的序列化与反序列化。
1. JSON序列化与反序列化
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web应用程序中的数据传输。在C#中,可以使用System.Text.Json
命名空间下的JsonSerializer
类进行JSON的序列化与反序列化。
1.1 JSON序列化
示例代码:
using System;
using System.Text.Json;
namespace SerializationDemo
{
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 = "John", Age = 30 };
string json = JsonSerializer.Serialize(person);
Console.WriteLine(json);
}
}
}
输出结果:
{"Name":"John","Age":30}
1.2 JSON反序列化
示例代码:
using System;
using System.Text.Json;
namespace SerializationDemo
{
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
string json = "{\"Name\":\"John\",\"Age\":30}";
Person person = JsonSerializer.Deserialize<Person>(json);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
输出结果:
Name: John, Age: 30
2. XML序列化与反序列化
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,也被广泛应用于Web应用程序开发。在C#中,可以使用System.Xml.Serialization
命名空间下的XmlSerializer
类进行XML的序列化与反序列化。
2.1 XML序列化
示例代码:
using System;
using System.IO;
using System.Xml.Serialization;
namespace SerializationDemo
{
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 = "John", Age = 30 };
XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (TextWriter writer = new StreamWriter("person.xml"))
{
serializer.Serialize(writer, person);
}
}
}
}
person.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>John</Name>
<Age>30</Age>
</Person>
2.2 XML反序列化
示例代码:
using System;
using System.IO;
using System.Xml.Serialization;
namespace SerializationDemo
{
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 (TextReader reader = new StreamReader("person.xml"))
{
Person person = (Person)serializer.Deserialize(reader);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
}
输出结果:
Name: John, Age: 30
3. 二进制格式序列化与反序列化
除了JSON和XML格式,C#还支持将对象序列化为二进制格式进行存储和传输。在C#中,可以使用System.Runtime.Serialization
命名空间下的BinaryFormatter
类进行二进制格式的序列化与反序列化。
3.1 二进制格式序列化
示例代码:
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace SerializationDemo
{
[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 = "John", Age = 30 };
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream("person.bin", FileMode.Create))
{
formatter.Serialize(stream, person);
}
}
}
}
3.2 二进制格式反序列化
示例代码:
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace SerializationDemo
{
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream("person.bin", FileMode.Open))
{
Person person = (Person)formatter.Deserialize(stream);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
}
通过以上示例代码,我们可以看到C#中使用JSON、XML和二进制格式进行序列化与反序列化的基本用法。根据实际项目需求和场景,选择合适的序列化方式来存储和传输数据,可以提高开发效率并且保证数据的完整性和安全性。
本文来自极简博客,作者:网络安全守护者,转载请注明原文链接:C#中的序列化与反序列化:JSON、XML与二进制格式