zoukankan      html  css  js  c++  java
  • Dictionary(支持 XML 序列化),注意C#中原生的Dictionary类是无法进行Xml序列化的

     1     /// <summary>
     2     /// Dictionary(支持 XML 序列化)
     3     /// </summary>
     4     /// <typeparam name="TKey">键类型</typeparam>
     5     /// <typeparam name="TValue">值类型</typeparam>
     6     [XmlRoot("XmlDictionary")]
     7     [Serializable]
     8     public class XmlDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
     9     {
    10         #region 构造函数
    11         public XmlDictionary()
    12         { }
    13 
    14         public XmlDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary)
    15         { }
    16 
    17         public XmlDictionary(IEqualityComparer<TKey> comparer) : base(comparer)
    18         { }
    19 
    20         public XmlDictionary(int capacity) : base(capacity)
    21         { }
    22 
    23         public XmlDictionary(int capacity, IEqualityComparer<TKey> comparer) : base(capacity, comparer)
    24         { }
    25 
    26         protected XmlDictionary(SerializationInfo info, StreamingContext context) : base(info, context)
    27         { }
    28         #endregion 构造函数
    29 
    30         #region IXmlSerializable Members
    31         public XmlSchema GetSchema() => null;
    32 
    33         /// <summary>
    34         ///     从对象的 XML 表示形式生成该对象(反序列化)
    35         /// </summary>
    36         /// <param name="xr"></param>
    37         public void ReadXml(XmlReader xr)
    38         {
    39             if (xr.IsEmptyElement)
    40                 return;
    41             var ks = new XmlSerializer(typeof(TKey));
    42             var vs = new XmlSerializer(typeof(TValue));
    43             xr.Read();
    44             while (xr.NodeType != XmlNodeType.EndElement)
    45             {
    46                 xr.ReadStartElement("Item");
    47                 xr.ReadStartElement("Key");
    48                 var key = (TKey)ks.Deserialize(xr);
    49                 xr.ReadEndElement();
    50                 xr.ReadStartElement("Value");
    51                 var value = (TValue)vs.Deserialize(xr);
    52                 xr.ReadEndElement();
    53                 Add(key, value);
    54                 xr.ReadEndElement();
    55                 xr.MoveToContent();
    56             }
    57             xr.ReadEndElement();
    58         }
    59 
    60         /// <summary>
    61         ///     将对象转换为其 XML 表示形式(序列化)
    62         /// </summary>
    63         /// <param name="xw"></param>
    64         public void WriteXml(XmlWriter xw)
    65         {
    66             var ks = new XmlSerializer(typeof(TKey));
    67             var vs = new XmlSerializer(typeof(TValue));
    68             foreach (var key in Keys)
    69             {
    70                 xw.WriteStartElement("Item");
    71                 xw.WriteStartElement("Key");
    72                 ks.Serialize(xw, key);
    73                 xw.WriteEndElement();
    74                 xw.WriteStartElement("Value");
    75                 vs.Serialize(xw, this[key]);
    76                 xw.WriteEndElement();
    77                 xw.WriteEndElement();
    78             }
    79         }
    80         #endregion IXmlSerializable Members
    81     }
    View Code
  • 相关阅读:
    shell 基础进阶 *金字塔
    shell,awk两种方法写9*9乘法表
    shell脚本判断一个用户是否登录成功
    shell 冒泡算法 解决数组排序问题
    shell 石头剪刀布
    应用shell (ssh)远程链接主机
    nmcli命令使用
    光盘yum源autofs按需挂载
    LVM扩容,删除
    LVM创建
  • 原文地址:https://www.cnblogs.com/maozhh/p/6731672.html
Copyright © 2011-2022 走看看