ASP.NET AJAXのJavaScriptSerializerを使わない理由

・タイプが不定のとき、serializeはうまくいくがdeserializeの時どうにもならない

パターン活用してabstractなクラスを使ったりベースクラスはabstractではないがvirtualメソッド活用してかつプロパティを追加しているような場合、deserializeしたとき実装クラスが復元されないと困る。もしかしたらベースクラスで復元されても困らないようにデザインするのが正しいのかもしれないが。

だから未だにNii.JSONのお世話になっている。もうjson.orgから抹消されたみたいだし他の実装も出来てはいるんだろうけど、プロジェクトの都合で使ってしまった部分もあり変更できない。

ところでマイナーではあるがNii.JSONはバグがある。
0x20未満であらかじめNii.JSONが把握していない制御コードがシリアライズする文字列に含まれている場合、例外を吐く。制御コードを"\u00xx"にしようとしているのだが、dotnet2だからなのか、次のコードが失敗する
JSONUtil.escape()

string tmp = new string(c,1);
t = "000" + int.Parse(tmp,System.Globalization.NumberStyles.HexNumber);
sb.Append("\\u" + t.Substring(t.Length - 4));

何か勘違いがある?だからこう直した

string tmp = ((int)c).ToString("x4");
sb.Append("\\u" + tmp);

この部分を通ることはめったにないが、MS Wordなどで作った文書から貼り付けられた文字列の中に縦タブコード("\v" = 11 = 0x0b)が混ざっている事があり、そのような場合でもどうにかしなければならないので、この対応は必須。