在C#中,可以使用System.Runtime.Serialization
命名空間中的DataContractSerializer
類來實現Map集合(字典)的序列化和反序列化
首先,需要引入System.Runtime.Serialization
命名空間:
using System.Runtime.Serialization;
接下來,定義一個包含字典的數據協定類:
[DataContract]
public class MapContainer
{
[DataMember]
public Dictionary<string, string> Map { get; set; }
}
然后,創建一個DataContractSerializer
實例,用于序列化和反序列化字典:
DataContractSerializer serializer = new DataContractSerializer(typeof(MapContainer));
序列化:將字典轉換為XML格式的字符串。
MapContainer container = new MapContainer
{
Map = new Dictionary<string, string>
{
{ "key1", "value1" },
{ "key2", "value2" }
}
};
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, container);
stream.Position = 0;
using (StreamReader reader = new StreamReader(stream))
{
string xmlString = reader.ReadToEnd();
Console.WriteLine("Serialized XML:");
Console.WriteLine(xmlString);
}
}
反序列化:將XML格式的字符串轉換回字典。
string xmlString = "<MapContainer xmlns=\"http://schemas.datacontract.org/2004/07/YourNamespace\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><Map><item><key>key1</key<value>value1</value></item><item><key>key2</key<value>value2</value></item></Map></MapContainer>";
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
{
MapContainer deserializedContainer = (MapContainer)serializer.ReadObject(stream);
Console.WriteLine("Deserialized Map:");
foreach (var item in deserializedContainer.Map)
{
Console.WriteLine($"Key: {item.Key}, Value: {item.Value}");
}
}
注意:在這個示例中,我們使用了MemoryStream
和StreamReader
來處理XML字符串。你也可以使用其他方法,如文件流或網絡流,根據實際需求進行調整。