だらだらやるよ。

こげつのIT技術メモ

XmlSerializerではまった

最近俺俺ライブラリを作ってたのですが、はまりました。


WindowsMobileアプリで設定画面を楽に作るためのライブラリなんですが、設定の保存部分にXmlSerializerクラスを使ってて、シリアライズはできるけどデシリアライズできないという現象に引っかかりました。


まず結論から言うと、デフォルトコンストラクタを設定してないとうまくデシリアライズできません。
確かに考えると納得なんですけど、リストに放り込んだ設定用の値を持ったインスタンスシリアライズしてたので、リストがまずいのかなーとかちょっとはまりましたね。


一応コードです。
こんな感じのクラスを用意して

public class SettingValue{
	public SettingValue(string key,string value){
		Key = key;
		Value = value;
	}
	public string Key="";
	public string Value="";
}

で、こんなかんじ
XmlSerializerは、自前のラップしたクラス使ってる。

_list.Add(new SettingValue("key1","hoge"));
_list.Add(new SettingValue("key2","hage"));
_list.Add(new SettingValue("key3","hige"));
ExXmlSerializer<SettingValue[]> s = new ExXmlSerializer<SettingValue[]>();
s.Serialize("保存先のファイルパス",_list.ToArray());

で、シリアライズは問題なし。出力もされてる。


ただ、デシリアライズで怒られる

ExXmlSerializer<SettingValue[]> s = new ExXmlSerializer<SettingValue[]>();
_list.Clear();
_list.AddRange(s.Deserialize("保存先のファイルパス") ?? new SettingValue[]{});


最初のクラスをこんな感じに変更して対応終了

public class SettingValue{
	public SettingValue(){}
	public SettingValue(string key,string value){
		Key = key;
		Value = value;
	}
	public string Key="";
	public string Value="";
}

やあ、デフォルトコンストラクタって大事ですね!

ポメラをお薦めする人しない人

ポメラを買って思ったこと。
何人かの人に「それ便利なの?」って聞かれたりしたのですが、そういう質問が出る人には便利じゃないです。
「ほしいんだけどキーボードどう?」とか「バッテリーの持ちとかどうなの?」という感じで聞いてくる人には超お薦めします。


えっとまぁ、なんだろう。
PCやスマートフォンみたいな、色々できるせいで使ってみないと良さがわかりにくい製品とは違って
できることがシンプルなので、商品コンセプトを見て、利用シーンが想定できる人にはお勧めしていいなぁと(もちろん実物が使いづらいとかだったら当然薦められませんが)。


あ、僕が前レッツノートのケース買ったところで、ポメラ用のカバーが出てるみたいです。
写真を見る限り装着したまま開閉できるのかな。
僕は傷とかそんなに気にしないので使ってませんが、気になる人は検討してみても。
POMERA専用システム手帳型ケース