VS2019を使用して開発しているWinFormsアプリケーションにおいて設定のシリアライズ・デシリアライズをしたい
MessagePack v2.1.165をNuGetパッケージマネージャからインストールしました。
速度に定評があるという理由で採用しました。
##設定データのシリアライズテストを行いました。
それは容易に成功しました。
このようなボタンを使います。
C#
1 /// <summary> 2 ///指定したパスのファイルをオブジェクトに復元する 3 /// </summary> 4 public static byte[] LoadFromBinaryFileTest(string path) 5 { 6 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); 7 byte[] bs = new byte[fs.Length]; 8 fs.Read(bs, 0, bs.Length); 9 fs.Close(); 10 return bs; 11 } 12 13 /// <summary> 14 /// オブジェクトの内容を指定したパスのファイルにシリアル化して保存する 15 /// </summary> 16 public static void SaveToBinaryFileTest(byte[] ob, string path) 17 { 18 FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); 19 fs.Write(ob, 0, ob.Length); 20 fs.Close(); 21 } 22 23 24 string testPath = @"C:\Users\watakushi\Desktop\HOGEE.txt"; 25 26 private void button1Save_Click(object sender, EventArgs e) 27 { 28 var mc = new TestSetting(); 29 30 // 保存 31 var bytes = MessagePackSerializer.Serialize(mc); 32 MyForm.SaveToBinaryFileTest(bytes, testPath); 33 34 } 35 private void button2Load_Click(object sender, EventArgs e) 36 { 37 var bytes = MyForm.LoadFromBinaryFileTest(testPath); 38 39 //読み取り 40 var mc2 = new TestSetting(); 41 mc2 = MessagePackSerializer.Deserialize<TestSetting>(bytes); 42 } 43 } 44 45 46 47 [MessagePackObject] 48 public class TestSetting 49 { 50 51 [Key(0)] 52 public int test1 { get; set; } = 500; 53 54 [Key(1)] 55 public float test2 { get; set; } = 200; 56 57 [Key(2)] 58 public string test3 { get; set; } = "test3の初期値だよ"; 59 60 61 62 //[Key(3)] 63 //public string test4 { get; set; } = "test4の初期値だよ"; 64 65 //[Key(4)] 66 //public List<string> test5 = new List<string>(); 67 } 68
悩み
Key(3)と(4)がコメントアウトしている状態でシリアライズして保存し、コメントアウトを解除して実行したアプリでLoadボタンを押した時、デシリアライズされたmc2のtest4とtest5はnullとなってしまう。
知りたいこと
保存済みのシリアライズデータ上に存在しないフィールドの初期値を反映するにはどのようにすればよいのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/10 03:20