📜  C#反序列化(1)

📅  最后修改于: 2023-12-03 15:00:17.345000             🧑  作者: Mango

C#反序列化

简介

C#反序列化(C# Deserialization)是将序列化后的二进制数据还原成原来的对象。序列化(Serialization)是将对象转换为二进制数据以便在网络传输、存储等场景下使用。

C#反序列化使用的主要类是System.Runtime中的DataContractSerializer类,它可以将对象序列化为XML或JSON格式的数据。

使用示例
反序列化XML格式数据
using System.Runtime.Serialization;
using System.IO;

// 定义一个类
[DataContract]
public class Person
{
    [DataMember]
    public int Id { get; set; }
    
    [DataMember]
    public string Name { get; set; }
    
    [DataMember]
    public int Age { get; set; }
}

// 反序列化XML格式数据
DataContractSerializer dcs = new DataContractSerializer(typeof(Person));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xmlData)); // xmlData为待反序列化的数据
Person person = (Person)dcs.ReadObject(ms);
反序列化JSON格式数据
using System.Runtime.Serialization.Json;
using System.IO;

// 定义一个类
[DataContract]
public class Person
{
    [DataMember]
    public int Id { get; set; }
    
    [DataMember]
    public string Name { get; set; }
    
    [DataMember]
    public int Age { get; set; }
}

// 反序列化JSON格式数据
DataContractJsonSerializer dcs = new DataContractJsonSerializer(typeof(Person));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)); // jsonData为待反序列化的数据
Person person = (Person)dcs.ReadObject(ms);
注意事项

在进行C#反序列化时,需要保证反序列化的类与序列化时的类是一致的,即包含相同的字段和属性,且顺序也要一致。在序列化和反序列化时,应该使用相同的编码格式(如UTF-8)和字符集(如ASCII)以避免乱码问题。