.NET 中有可序列化的通用键值对类吗

c++

1个回答

写回答

haotiansunjing

2025-07-05 22:25

+ 关注

AI
AI

在.NET中,我们可以使用Dictionary类来实现键/值对的存储和访问。这个类是.NET Framework中的一个通用泛型类,可以存储任意类型的键和值。然而,Dictionary类本身并不支持序列化,因此无法直接将其存储到磁盘或在网络上传输。

为了解决这个问题,.NET Framework提供了SerializableDictionary类,它是一个可序列化的通用键/值对类。这个类继承自Dictionary,并实现了ISerializable接口。通过实现ISerializable接口,我们可以自定义键/值对类的序列化和反序列化过程。

下面是一个示例代码,演示了如何使用SerializableDictionary类:

csharp

using System;

using System.IO;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

[Serializable]

public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializable

{

public SerializableDictionary() { }

protected SerializableDictionary(SerializationInfo info, StreamingContext context) : base(info, context) { }

public void GetObjectData(SerializationInfo info, StreamingContext context)

{

foreach (var pAIr in this)

{

info.AddValue(pAIr.Key.ToString(), pAIr.Value);

}

}

}

public class Program

{

public static void MAIn(string[] args)

{

SerializableDictionary<string, int> dictionary = new SerializableDictionary<string, int>();

dictionary.Add("Apple", 1);

dictionary.Add("Banana", 2);

dictionary.Add("Orange", 3);

// 序列化字典到磁盘

IFormatter formatter = new BinaryFormatter();

using (Stream stream = new FileStream("dictionary.bin", FileMode.Create, FileAccess.Write))

{

formatter.Serialize(stream, dictionary);

}

// 从磁盘反序列化字典

SerializableDictionary<string, int> deserializedDictionary;

using (Stream stream = new FileStream("dictionary.bin", FileMode.Open, FileAccess.Read))

{

deserializedDictionary = (SerializableDictionary<string, int>)formatter.Deserialize(stream);

}

// 输出反序列化后的字典内容

foreach (var pAIr in deserializedDictionary)

{

Console.WriteLine($"Key: {pAIr.Key}, Value: {pAIr.Value}");

}

}

}

使用SerializableDictionary类实现序列化

上面的代码中,我们定义了一个可序列化的通用键/值对类SerializableDictionary,它继承自Dictionary并实现了ISerializable接口。在GetObjectData方法中,我们使用SerializationInfo类的AddValue方法将字典中的键和值添加到序列化信息中。

在MAIn方法中,我们创建了一个SerializableDictionary对象,并向其中添加了一些键/值对。然后,我们使用BinaryFormatter类将字典序列化到磁盘文件dictionary.bin中。接着,我们使用相同的BinaryFormatter对象从磁盘文件中反序列化字典,并输出反序列化后的键/值对。

通过这种方式,我们可以方便地将SerializableDictionary类的实例序列化到磁盘或在网络上传输,从而实现键/值对的持久化和跨应用程序的传递。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号