XML Serializable Generic Dictionary
2007-03-30 10:29 清炒白菜 阅读(381) 评论(0) 收藏 举报方法一:(引自http://shanyou.cnblogs.com/archive/2006/05/24/408334.aspx)
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
namespace Test
{
[XmlRoot("dictionary")]
public class SerializableDictionary<TKey, TValue>
: Dictionary<TKey, TValue>, IXmlSerializable
{
构造函数
IXmlSerializable Members
}
}
方法二:(引自http://www.cnblogs.com/swnuwangyun/archive/2007/03/27/689812.html)
/// This class is used for xml serialization on generic type Dictionary
/// </summary>
public class DictionaryHolder
{
public string logicalName = "";
public List<string> physicalNames = new List<string>();
}
/**//// <summary>
/// Loads the specified database.
/// </summary>
/// <param name="database">The database.</param>
public void load(string database)
{
FileStream fs = null;
try
{
XmlSerializer xs = new XmlSerializer(typeof(List<DictionaryHolder>));
fs = new FileStream(database, FileMode.Open, FileAccess.Read, FileShare.Read);
List<DictionaryHolder> holders = (List<DictionaryHolder>)xs.Deserialize(fs);
this._dictionary.Clear();
foreach (DictionaryHolder holder in holders)
{
this._dictionary.Add(holder.logicalName, holder.physicalNames);
}
}
catch(Exception ex)
{
throw;
}
finally
{
if (fs != null)
fs.Close();
}
}
/**//// <summary>
/// Saves the specified database.
/// </summary>
/// <param name="database">The database.</param>
public void save(string database)
{
FileStream fs = null;
try
{
List<DictionaryHolder> holders = new List<DictionaryHolder>();
foreach (string key in this._dictionary.Keys)
{
DictionaryHolder holder = new DictionaryHolder();
holder.logicalName = key;
holder.physicalNames = this._dictionary[key];
holders.Add(holder);
}
XmlSerializer xs = new XmlSerializer(typeof(List<DictionaryHolder>));
fs = new FileStream(database, FileMode.Create, FileAccess.Write, FileShare.Read);
xs.Serialize(fs, holders);
}
catch (Exception ex)
{
throw;
}
finally
{
if (fs != null)
fs.Close();
}


浙公网安备 33010602011771号