その他

 .NET 2.0 ではジェネリックの Dictionary のオブジェクトをXMLシリアライズできません。敢えてシリアライズするため IXmlSerializable を実装する必要があります。

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace Common
{
   [XmlRoot("dictionary")]
   public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
   {
       #region IXmlSerializable Members

       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();
           }
       }

       #endregion

   }
}


フレッツ光が月額556円~【GMOとくとくBB】

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:33:10 (1628d)

e[NȂECir Yahoo yV LINEf[^[Ōz500~`I
z[y[W ̃NWbgJ[h COiq@COsیI COze