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