C#.NET:JSONファイルの読み書き

XMLよりもデータサイズが小さくなるので、データのやり取りにはこちらを使った方がいいかも

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Windows;

namespace WpfApp
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        /// <summary>
        /// ファイルのフィルタ
        /// </summary>
        private const string FILTER = "*.test|*.test";

        /// <summary>
        /// 設定のproperty
        /// </summary>
        private ValuesClass FormParams
        {
            get
            {
                return new ValuesClass()
                {
                    Val1 = (int)cmbVal1.SelectedValue,
                    Val2 = txtVal2.Text,
                    Val3 = (bool)chkVal3.IsChecked,
                };
            }
            set
            {
                if (value != null)
                {
                    cmbVal1.SelectedValue = value.Val1;
                    txtVal2.Text = value.Val2;
                    chkVal3.IsChecked = value.Val3;
                }
            }
        }

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public MainWindow()
        {
            // コンポーネントの初期化
            InitializeComponent();

            InitCmb();
        }

        /// <summary>
        /// open file button click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnLoad_Click(object sender, RoutedEventArgs e)
        {
            OpenFile();
        }

        /// <summary>
        /// save file button click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnSave_Click(object sender, RoutedEventArgs e)
        {
            SaveFile();
        }

        /// <summary>
        /// JSONファイルの読み込み
        /// </summary>
        private void OpenFile()
        {
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = FILTER;
                openFileDialog.ShowDialog(this);

                // ファイルが選択されているか?
                if (openFileDialog.FileNames.Length > 0)
                {
                    // ファイルをOPEN
                    using (FileStream stream = File.Open(openFileDialog.FileNames.First(), FileMode.Open))
                    {
                        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ValuesClass));
                        FormParams = (ValuesClass)serializer.ReadObject(stream);
                    }
                    MessageBox.Show(string.Format("\"{0}\"から設定ファイルを読み込みました。", openFileDialog.FileNames.First()));
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        /// <summary>
        /// JSONファイルの保存
        /// </summary>
        private void SaveFile()
        {
            try
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = FILTER;
                saveFileDialog.ShowDialog(this);

                // ファイルが選択されているか?
                if (saveFileDialog.FileNames.Length > 0)
                {
                    // 上書きモードでファイルをOPEN
                    using (FileStream stream = File.Open(saveFileDialog.FileNames.First(), FileMode.Create))
                    {
                        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ValuesClass));
                        serializer.WriteObject(stream, FormParams);
                    }
                    MessageBox.Show(string.Format("設定ファイルを\"{0}\"へ保存しました。", saveFileDialog.FileNames.First()));
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        /// <summary>
        /// コンボボックスの初期化
        /// </summary>
        private void InitCmb()
        {
            Dictionary<int, string> dic = new Dictionary<int, string>
            {
                {1, "あ"},
                {2, "い"},
                {3, "う"},
            };

            // binding
            cmbVal1.ItemsSource = dic;
            cmbVal1.DisplayMemberPath = "Value";
            cmbVal1.SelectedValuePath = "Key";

            cmbVal1.SelectedIndex = 0;
        }

        /// <summary>
        /// JSONで読み書きするclass
        /// </summary>
        public class ValuesClass
        {
            public int Val1 { get; set; }
            public string Val2 { get; set; }
            public bool Val3 { get; set; }
        }
    }
}

最終更新:2014年01月31日 22:52
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。
添付ファイル