knockout.jsでjsonをQuery Stringに変換する際にハマった。

knockout.jsを使ってる前提でお話します。
例えば、こんなモデルがあるとして

function BlockSearchConditionModel(){
    this.width = ko.observable("");
    this.height = ko.observable("");
}

これをjQueryajaxでGetのパラメータに含めたい場合、

$.ajax({
    type: "Get",
    url: "/hoge/api/v1/blocks/search.json?widht=" + model.width() + "&height=" + model.height(),
    success: function(data){

        // 成功時

    } 
});

とする方法が考えられるが、
この方法だと条件が増えるたびにパラメータを書き換える必要がある。
なので、data: に$.paramを使いたい。

api.jquery.com

こっから本題です。
jsonにして渡すと

$.ajax({
    type: "Get",
    url: "/hoge/api/v1/blocks/search.json",
        data: $.param(ko.toJSON(model)),
    success: function(data){

        // 成功時

    } 
});

0=%7B&1="&2=w&3=i&4=d&5=t&6=h&7="&8=・・・(略)
と、予想外のパラメータが生成されます。

なぜなら、ko.toJSONで生成されるjsonは "{ "width": "10", "height": "20"}"
のように、外っ側に"が付いているのです。。
OH !!!

わざわざjsonにしないで、object渡しましょう。

$.ajax({
    type: "Get",
    url: "/hoge/api/v1/blocks/search.json",
        data: $.param(model),
    success: function(data){

        // 成功時

    } 
});

というお話しです。
1時間近く考え込んでしまった・・。