2011年1月6日木曜日

classのSerialize

classをSerizlize(XMLフォーマット)して、DBやファイルに書き込むことで、柔軟性の高いデータ形式で保存できる。

例) DBの可変長列にSerializeしたクラスオブジェクトを書き込み、そのオブジェクトをDBを介して再現するような場合。あるいは、設定値などを保存しておく、などに使える。


Sample : refSbXmlに、typeとobjで渡したクラスの情報を、Serializeした結果をセットして戻す。
//■Serializeするメソッド例
        public void Serialize( ref StringBuilder refSbXml, Type type, object obj)
        {
            System.Xml.XmlWriter xml_writer = System.Xml.XmlWriter.Create( refSbXml );
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer( type );
            serializer.Serialize( xml_writer, obj );

            //    clean
            xml_writer = null;
            serializer = null;
        }

-----------------
//■呼び出し側
        StringBuilder sb_xml = new StringBuilder();
        OpLogDataKey_PAT_OPEN data_key = new OpLogDataKey_PAT_OPEN();
        data_key.PAT_ID = id;
        oplog_dataman.Serialize( ref sb_xml, typeof( OpLogDataKey_PAT_OPEN ), data_key);


//■SerializeするClass
    public class OpLogDataKey_PAT_OPEN
    {
        public string PAT_ID;
    }
-------------------
sb_xml.ToString()は、以下の文字列が得られる。

<?xml version="1.0" encoding="utf-16"?><OpLogDataKey_PAT_OPEN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><PAT_ID>36102152</PAT_ID></OpLogDataKey_PAT_OPEN>

-------------------
Deserializeは、XmlSerializerクラスのDeserializeメソッドを使う。

        public object Deserialize( string xmlData, Type type)
        {
            System.Xml.XmlReader xml_reader = System.Xml.XmlReader.Create( new System.IO.StringReader( xmlData));
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer( type );
           return serializer.Deserialize( xml_reader);
        }

0 件のコメント:

コメントを投稿