c# 将字典序列化为 xml 文件
c# serialize dictionary into xml file
我正在编写一个 Windows 商店应用程序,它涉及将 Xml 文件序列化到字典中,反之亦然。使用 List<> 和 ObservableCollection<>,我可以这样做来读取 XML 文件:
单词 Class
public class word
{
[XmlElement("key")]
public string words { get; set; }
[XmlElement("value")]
public string value { get; set; }
}
阅读Class
using System.IO;
using Windows.Storage;
using System.Xml.Serialization;
using System.Collections.ObjectModel;
ObservableCollection<word> Words = new ObservableCollection<word>;
public async void Load()
{
StorageFolder localFolder = Windows.Storage.KnownFolders.MusicLibrary;
StorageFile file = await localFolder.GetFileAsync("dictionary.xml");
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<word>));
using (Stream stream = await file.OpenStreamForReadAsync())
{
ObservableCollection<word> list = serializer.Deserialize(stream) as ObservableCollection<word>;
foreach (var c in list)
{
Words.Add(c);
}
}
}
但是Dictionary<>有一对TKey和TValue,导致上面的代码无法使用。无论如何修复上面的代码以适合 Dictionary<>?感谢您的帮助。
您需要将每个项目转换为不是 KeyValuePair 的对象。我使用像这样的简单 class 来序列化字典,可以轻松修改它以支持 ConcurrentDictionay 或 ObservableCollection。
static public class XmlDictionarySerializer<A, B>
{
public class Item
{
public A Key { get; set; }
public B Value { get; set; }
}
static public void Serialize(IDictionary<A, B> dictionary, string filePath)
{
List<Item> itemList = new List<Item>();
foreach (A key in dictionary.Keys)
{
itemList.Add(new Item() { Key = key, Value = dictionary[key] });
}
XmlDataSerializer.Serialize<List<Item>>(itemList, filePath);
}
static public Dictionary<A, B> DeserializeDictionary(string filePath)
{
Dictionary<A, B> dictionary = new Dictionary<A, B>();
List<Item> itemList = XmlDataSerializer.Deserialize<List<Item>>(filePath);
foreach (Item item in itemList)
{
dictionary.Add(item.Key, item.Value);
}
return dictionary;
}
}
我正在编写一个 Windows 商店应用程序,它涉及将 Xml 文件序列化到字典中,反之亦然。使用 List<> 和 ObservableCollection<>,我可以这样做来读取 XML 文件: 单词 Class
public class word
{
[XmlElement("key")]
public string words { get; set; }
[XmlElement("value")]
public string value { get; set; }
}
阅读Class
using System.IO;
using Windows.Storage;
using System.Xml.Serialization;
using System.Collections.ObjectModel;
ObservableCollection<word> Words = new ObservableCollection<word>;
public async void Load()
{
StorageFolder localFolder = Windows.Storage.KnownFolders.MusicLibrary;
StorageFile file = await localFolder.GetFileAsync("dictionary.xml");
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<word>));
using (Stream stream = await file.OpenStreamForReadAsync())
{
ObservableCollection<word> list = serializer.Deserialize(stream) as ObservableCollection<word>;
foreach (var c in list)
{
Words.Add(c);
}
}
}
但是Dictionary<>有一对TKey和TValue,导致上面的代码无法使用。无论如何修复上面的代码以适合 Dictionary<>?感谢您的帮助。
您需要将每个项目转换为不是 KeyValuePair 的对象。我使用像这样的简单 class 来序列化字典,可以轻松修改它以支持 ConcurrentDictionay 或 ObservableCollection。
static public class XmlDictionarySerializer<A, B>
{
public class Item
{
public A Key { get; set; }
public B Value { get; set; }
}
static public void Serialize(IDictionary<A, B> dictionary, string filePath)
{
List<Item> itemList = new List<Item>();
foreach (A key in dictionary.Keys)
{
itemList.Add(new Item() { Key = key, Value = dictionary[key] });
}
XmlDataSerializer.Serialize<List<Item>>(itemList, filePath);
}
static public Dictionary<A, B> DeserializeDictionary(string filePath)
{
Dictionary<A, B> dictionary = new Dictionary<A, B>();
List<Item> itemList = XmlDataSerializer.Deserialize<List<Item>>(filePath);
foreach (Item item in itemList)
{
dictionary.Add(item.Key, item.Value);
}
return dictionary;
}
}