C#でのシリアライズとデシリアライズの実装方法は何ですか?
C#では、オブジェクトをバイトストリームや文字列に変換して、異なるアプリケーション間での転送や蓄積に使用する、シリアライズとデシリアライズができます。
シリアライズとデシリアライズを実現するには、System.Runtime.Serialization 名前空間の関連クラスとインターフェースを使用する必要があります。以下は、C#でシリアライズとデシリアライズを実装する方法を示す簡単な例です。
- Serializable属性をマークすることで、シリアル化可能なクラスを定義します。
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
- System.Runtime.Serialization.Formatters.Binary ネームスペース内の BinaryFormatter クラスを使用して、シリアル化およびデシリアル化を行います。
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class Program
{
public static void Main(string[] args)
{
// 创建一个 Person 对象
Person person = new Person
{
Name = "John",
Age = 30
};
// 序列化对象
byte[] serializedData = SerializeObject(person);
// 反序列化对象
Person deserializedPerson = DeserializeObject<Person>(serializedData);
// 输出反序列化后的对象的属性值
Console.WriteLine($"Name: {deserializedPerson.Name}");
Console.WriteLine($"Age: {deserializedPerson.Age}");
}
// 序列化对象
public static byte[] SerializeObject<T>(T obj)
{
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream())
{
formatter.Serialize(memoryStream, obj);
return memoryStream.ToArray();
}
}
// 反序列化对象
public static T DeserializeObject<T>(byte[] data)
{
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream(data))
{
return (T)formatter.Deserialize(memoryStream);
}
}
}
上記の例では、まずシリアライズ可能な Person クラスが定義されました。次に、Main メソッドで Person オブジェクトが作成され、バイト配列にシリアライズされました。その後、DeserializeObjectメソッドを使用してバイト配列をPersonオブジェクトに逆シリアル化し、その属性値を出力しました。
上記の例では、BinaryFormatterクラスを使用してシリアル化および逆シリアル化が行われています。 シリアル化および逆シリアル化を実現する他の方法として、XMLシリアル化(XmlSerializer)やJSONシリアル化(Json.NET)などを使用することもできます。