2013/06/22

C#で設定をXMLファイルに保存・読み込みする

アプリケーションの設定を保存するには…
  • INIファイルを使用する
  • レジストリに書き込む
  • XMLファイルを使用する
  • Configファイルを使用する
  • Settingsファイルを使用する
などの方法が挙げられます。

いろいろありますが、 .NETの推奨は「XMLファイル」の使用です。 
そのXMLファイルを使ってアプリケーションの設定を保存する方法をまとめます。


以下のエントリで作ったプログラムに、ユーザIDやアクセストークンなどをXMLファイルに
保存する機能を追加する形でまとめます。






0.XMLファイルに保存するためのクラス作成


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TwitterClient
{
    public class TwitSettings
    {
        #region メンバ変数
        private string _userID;
        private string _screenName;

        private string _requestToken;
        private string _requestSecretToken;

        private string _accessToken;
        private string _accessSecretToken;
        #endregion

        #region プロパティ
        public string UserID
        {
            get { return _userID; }
            set { _userID = value; }
        }

        public string ScreenName
        {
            get { return _screenName; }
            set { _screenName = value; }
        }

        // リクエストトークンはXMLに書き込まない
        [System.Xml.Serialization.XmlIgnoreAttribute]
        public string RequestToken
        {
            get { return _requestToken; }
            set { _requestToken = value; }
        }

        // リクエストシークレットはXMLに書き込まない
        [System.Xml.Serialization.XmlIgnoreAttribute]
        public string RequestSecretToken
        {
            get { return _requestSecretToken; }
            set { _requestSecretToken = value; }
        }

        public string AccessToken
        {
            get { return _accessToken; }
            set { _accessToken = value; }
        }

        public string AccessSecretToken
        {
            get { return _accessSecretToken; }
            set { _accessSecretToken = value; }
        }
        #endregion
    }
}

XMLに保存したくない項目


プロパティの上に[System.Xml.Serialization.XmlIgnoreAttribute]って書くと保存されません。

クライアントに保存すると不都合があるものなどを指定します。
今回は、リクエストトークンとリクエストシークレットを保存しないようにしました。



1.XMLに保存



// いろいろ格納
TwitSettings settings = new TwitSettings();
settings.UserID = userId;
settings.ScreenName = screenName;
settings.RequestToken = requestToken;
settings.RequestSecretToken = requestSecret;
settings.AccessToken = accessToken;
settings.AccessSecretToken = accessSecret; 


  //---------------------------
// 1.XMLファイルに保存
//---------------------------

// XmlSerializerを使ってファイルに保存(TwitSettingオブジェクトの内容を書き込む)
XmlSerializer serializer = new XmlSerializer(typeof(TwitSettings));

// カレントディレクトリに"settings.xml"というファイルで書き出す
FileStream fs = new FileStream(Directory.GetCurrentDirectory() + "\\" + "settings.xml", FileMode.Create);

// オブジェクトをシリアル化してXMLファイルに書き込む
serializer.Serialize(fs, settings);
fs.Close();


2.XMLから読み込み



//---------------------------
// 2.XMLファイルを読み込む
//---------------------------

// XMLをTwitSettingsオブジェクトに読み込む
TwitSettings settings = new TwitSettings();
fs = new FileStream(Directory.GetCurrentDirectory() + "\\" + "settings.xml", FileMode.Open);

// XMLファイルを読み込み、逆シリアル化(復元)する
settings = (TwitSettings)serializer.Deserialize(fs);
fs.Close();


//---------------------------
// 3.読み込んだデータを出力
//---------------------------

Console.WriteLine("### XMLファイルから読み込み ###");
Console.WriteLine("UserId           :  " + settings.UserID);
Console.WriteLine("ScreenName       :  " + settings.ScreenName);
Console.WriteLine("AccessToken      :  " + settings.AccessToken);
Console.WriteLine("AccessSecretToken:  " + settings.AccessSecretToken);


XMLの中身



本当に簡単にXMLに保存、XMLから読み込みができました。
実装したときは本当に感動でした!

ちなみに出力されたXMLファイルは以下のようなものです。

<?xml version="1.0"?>
<TwitSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UserID>77967886</UserID>
  <ScreenName>bc_rikko</ScreenName>
  <AccessToken>AAAAAAAA</AccessToken>
  <AccessSecretToken>BBBBBBBB</AccessSecretToken>
</TwitSettings>





以上

0 件のコメント :

コメントを投稿