.NET XML序列化陷阱?

我在做C#XML序列化时遇到了一些陷阱,我想分享一下:


您无法序列化只读项(例如KeyValuePairs)

您无法序列化通用词典。相反,请尝试以下包装器类(来自http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx):

using System;

using System.Collections.Generic;

using System.Text;

using System.Xml.Serialization;


[XmlRoot("dictionary")]

public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable

{      

    public System.Xml.Schema.XmlSchema GetSchema()

    {

        return null;

    }


    public void ReadXml(System.Xml.XmlReader reader)

    {

        XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));

        XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));


        bool wasEmpty = reader.IsEmptyElement;

        reader.Read();


        if (wasEmpty)

            return;


        while (reader.NodeType != System.Xml.XmlNodeType.EndElement)

        {

            reader.ReadStartElement("item");


            reader.ReadStartElement("key");

            TKey key = (TKey)keySerializer.Deserialize(reader);

            reader.ReadEndElement();


            reader.ReadStartElement("value");

            TValue value = (TValue)valueSerializer.Deserialize(reader);

            reader.ReadEndElement();


            this.Add(key, value);


            reader.ReadEndElement();

            reader.MoveToContent();

        }

        reader.ReadEndElement();

    }


    public void WriteXml(System.Xml.XmlWriter writer)

    {

        XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));

        XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));


        foreach (TKey key in this.Keys)

        {

            writer.WriteStartElement("item");


            writer.WriteStartElement("key");

            keySerializer.Serialize(writer, key);

            writer.WriteEndElement();


            writer.WriteStartElement("value");

            TValue value = this[key];

            valueSerializer.Serialize(writer, value);

            writer.WriteEndElement();


            writer.WriteEndElement();

        }

    }

}

还有其他XML序列化陷阱吗?


慕姐4208626
浏览 492回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP