码迷,mamicode.com
首页 > 其他好文 > 详细

将XML 序列化为Dictonary

时间:2018-02-05 18:34:18      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:formatter   turn   lag   man   software   lob   state   ide   dstar   

[Serializable]
[XmlRoot("Properties")]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable, ISerializable
{
    public SerializableDictionary()
    {
    }

    [EditorBrowsable(EditorBrowsableState.Advanced)]
    public SerializableDictionary(SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
    }

    [EditorBrowsable(EditorBrowsableState.Advanced)]
    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        base.GetObjectData(info, context);
    }

    public XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(XmlReader reader)
    {
        XmlSerializer xmlSerializer = typeof(TKey).CreateDefaultXmlSerializer();
        XmlSerializer xmlSerializer2 = typeof(TValue).CreateDefaultXmlSerializer();
        bool isEmptyElement = reader.IsEmptyElement;
        reader.Read();
        if (!isEmptyElement)
        {
            while (reader.NodeType != XmlNodeType.EndElement)
            {
                reader.ReadStartElement("item");
                reader.ReadStartElement("key");
                TKey key = (TKey)xmlSerializer.Deserialize(reader);
                reader.ReadEndElement();
                reader.ReadStartElement("value");
                TValue value = (TValue)xmlSerializer2.Deserialize(reader);
                reader.ReadEndElement();
                base.Add(key, value);
                reader.ReadEndElement();
                reader.MoveToContent();
            }
            reader.ReadEndElement();
        }
    }

    public void WriteXml(XmlWriter writer)
    {
        XmlSerializer xmlSerializer = typeof(TKey).CreateDefaultXmlSerializer();
        XmlSerializer xmlSerializer2 = typeof(TValue).CreateDefaultXmlSerializer();
        foreach (TKey key in base.Keys)
        {
            writer.WriteStartElement("item");
            writer.WriteStartElement("key");
            xmlSerializer.Serialize(writer, key);
            writer.WriteEndElement();
            writer.WriteStartElement("value");
            TValue val = base[key];
            xmlSerializer2.Serialize(writer, val);
            writer.WriteEndElement();
            writer.WriteEndElement();
        }
    }
}
public static T FromXmlString<T>(string xml)
{
    if (string.IsNullOrEmpty(xml))
    {
        return default(T);
    }
    using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
    {
        return XmlObjectHelpers.FromXmlStream<T>(stream);
    }
}
public static T DeserializeFromXml<T>(this string xml)
{
    return XmlObjectHelpers.FromXmlString<T>(xml);
}

 代码来自:Kroll Software

将XML 序列化为Dictonary

标签:formatter   turn   lag   man   software   lob   state   ide   dstar   

原文地址:https://www.cnblogs.com/w2011/p/8418441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!