ものがたり(旧)

atsushieno.hatenablog.com に続く

IEnumerable of JsonPrimitive は IEnumerable of JsonValueにキャストできない

id:coma2n:20080617:1213669175

日本でもSystem.Jsonの方のLinq to JSONに言及する人がぼちぼち出てきたということでしょうか。で、

JsonArrayはIEnumerableを実装しているので、当然LINQの対象にすることができる。LINQを使えばJSONから.NETオブジェクトへの変換も簡単ですね。

とあるのだけど、id:atsushieno:20080610でついカッとなって実装した後でmonologueに書いたように、実際にはちょっとめんどくさい。

JsonArrayのコンストラクタへの引数はIEnumerable(of JsonValue)なのだけど、LINQ式のselectで返される型がJsonPrimitiveやJsonObjectになっていると、IEnumerable(of JsonPrimitive)やIEnumerable(of JsonObject)になってしまう。これは実はIEnumerable(of JsonValue)と互換性が無い。だから、selectの部分でいちいちJsonValueにキャストしてやらないといけないという、中途半端な書き方を強いられるわけだ。

Json.NETのLinq to JSONでは、JArrayの引数はobjectになっていて、中で適当にごにょっているので、こういう書き方は強いられない。Linq to XMLもobjectの引数を受け付けるので同様だ。多分この辺は最終版までには改善されるんじゃないかと思う。どうだろうね。実際にSL2で使いたい人がリクエストを投げるかどうかだけど。