代码改变世界

XML Serializable Generic Dictionary

2007-03-30 10:29  清炒白菜  阅读(379)  评论(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();
            }