public partial class Form1 : Form
    {
        private List<Person> _people;
        public Form1()
        {
            InitializeComponent();
            _people = People.GetFakeData();
        }       

        private void writebutton_Click(object sender, EventArgs e)
        {
            var dialog = new SaveFileDialog() { InitialDirectory = Environment.CurrentDirectory };
            dialog.ShowDialog(); 
            if (!string.IsNullOrWhiteSpace (dialog.FileName))
            {
                var json = JsonConvert.SerializeObject(_people);               
                File.WriteAllText(dialog.FileName, json);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = _people;
        }
    }
namespace AssociationSample002
{
    /// <summary>
    /// 擷取方法,並且降低方法與Form1 的耦合
    /// </summary>
    public partial class Form1 : Form
    {
        private List<Person>_people;
        public Form1()
        {
            InitializeComponent();
            _people = People.GetFakeData();
        }

        private void writebutton_Click(object sender, EventArgs e)
        {
            var path = GetPath();
            if (!string.IsNullOrWhiteSpace(path))
            {
                var json = Convert(_people);
                Write(path, json);
            }
        }

        /// <summary>
        /// 職責 1 取得目標路徑
        /// </summary>
        /// <returns></returns>
        private string GetPath()
        {
            var dialog = new SaveFileDialog() { InitialDirectory = Environment.CurrentDirectory };
            dialog.ShowDialog();
            return dialog.FileName; 
        }

        /// <summary>
        /// 職責 2 轉換資料
        /// </summary>
        /// <param name="people"></param>
        /// <returns></returns>
        private string Convert(List<Person> people)
        {
            return JsonConvert.SerializeObject(people);
        }

        /// <summary>
        /// 職責 3 寫入
        /// </summary>
        /// <param name="path"></param>
        /// <param name="content"></param>
        private void Write(string path, string content)
        {
            File.WriteAllText(path, content);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = _people;
        }
    }
}