C#中的序列化与反序列化:JSON、XML与二进制格式

网络安全守护者 2019-04-16 ⋅ 25 阅读

在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和二进制格式进行序列化与反序列化的基本用法。根据实际项目需求和场景,选择合适的序列化方式来存储和传输数据,可以提高开发效率并且保证数据的完整性和安全性。


全部评论: 0

    我有话说: