首页 > 其他 > 详细

将XML 序列化为Dictonary

时间:2018-02-05 18:21:23      阅读:251      评论:0      收藏:0      [点我收藏+]
[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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!