しつこくも続いてます。
やっぱりJOSNのほうがデータ小さいしJSON対応にすっかーと思ってJsonReaderWriterFactoryを挟んでみたらあっさりと成功。いわゆるLinq to JSONってやつですな。気をよくしてSLとWP7もやりますかね~って感じで書き換えていったまではいいのですが。。。
ない。。。
WP7にJsonReaderWriterFactoryがねェ!!まじかよ~と嘆きつつもないものは仕方ないのでDataContractJsonSerializerでシリアライズする方向に。JsonReaderWriterFactoryは幸せなんですがマルチな展開を考えるとDataContractJsonSerializer一択って感じですね。。。とはいえWeb相手だとガッツリ定義できないことも多いのでなかなか悩ましい。。。とはいえDataContractJsonSerializer自体はかなりいい感じです。さっくりとデシリアライズできたのでなにも困らなかったです。JsonReaderWriterFactoryを使ってのLinqToJSONはT4とかで生かすといい感じになるんじゃないでしょうか。
今回とくに書くネタもないんですが検索部分を若干修正しました。複数回指定できるようなパラメータがあるんですが今までパラメータをWhere句から拾ってDictionaryに突っ込んでたので同一のキーが定義できなかったのでList<KeyValuePair<string, string>>な感じに変えるとともにドメイン(定義域)を持ったやつをクラスにくくり出しました。まぁふつうはEnumにするところなんですが最終的な文字列への落とし込みとExpressionからの拾い上げがめんどいのでEnumじゃないです。どういうものかというと。。。
/// <summary>
/// 検索範囲
/// </summary>
public struct Range
{
private string _value;
internal string Value { get { return _value; } }
public static Range m300 { get { return new Range("1"); } }
public static Range m500 { get { return new Range("2"); } }
public static Range km1 { get { return new Range("3"); } }
public static Range km2 { get { return new Range("4"); } }
public static Range km3 { get { return new Range("5"); } }
private Range(string value)
{
this._value = value;
}
public override string ToString()
{
return _value;
}
public static bool operator ==(Range lhs, Range rhs)
{
return lhs.Value == rhs.Value;
}
public static bool operator !=(Range lhs, Range rhs)
{
return !(lhs == rhs);
}
}
こんな感じで文字列Enumっぽいものとしてよく作られるんじゃないかなぁと想像。こうすると文字列だと間違うところが間違えないし比較対象も限定できるので。(EqualsとかGetHashはいらないので手抜き^^;)
実際動かしてみるとRxのメリットはかなり大きいですね。何より止まらずにデータが振ってくるのはかなり素敵な感じです。
さぁ。準備はできたのでSilverlightのお勉強ができるぞっと。