2012-02-21 6 views
0

JSON.netによってシリアル化されているオブジェクトがあり、javascriptクライアントに送信され、javascriptオブジェクトに変換されます。オブジェクトはユーザによって編集され、javacriptはJSON.stringify(myObject)を使ってjsonに変換し、それをajax経由でJSON.netを使用して元のオブジェクトに逆シリアル化するメソッドに戻します。JSON.net jsonで二重引用符でデシリアライズが失敗する

二重引用符を含むオブジェクトに値が設定されるまで、これはすべてうまく動作します。その時点で、JSON.netの逆シリアル化は失敗します。

"{ 
    \"$id\":\"1\", 
    \"Treatment_ID\":36050, 
    \"Project_Classification\":\"MCPM\", 
    \"Improvement_Type\":\"Cape Seal\", 
    \"Jurisdiction\":\"24120\", 
    \"Description\":\"\", 
    \"Planned\":true, 
    \"Comment\":\"test22 2\"\" 
}" 

全二重引用符を自動的にエスケープされています:ここで

は、逆シリアル化のためにJSON.netまで送られているJSONの例です。彼らはエスケープされていなかった場合は、JSONはより次のようになります。

"{ 
    "$id":"1", 
    "Treatment_ID":36050, 
    "Project_Classification":"MCPM", 
    "Improvement_Type":"Cape Seal", 
    "Jurisdiction":"24120", 
    "Description":"", 
    "Planned":true, 
    "Comment":"test22 2\"" 
}" 

どのように私は、この動作を克服するのですか?

+0

JSON.stringifyやライブラリのブラウザの実装に頼っていますか? JSON.stringifyは、 "Comment"の値内で二重引用符をエスケープする必要があります。 –

+0

私はそれがブラウザの実装だと信じています。 JSONを何か他のものとして定義しているjavascriptには参照がありません。上記の例はFireFox 9にあります。 –

+0

@AmandaMyer - 問題がブラウザ固有のものだと思うなら、[Douglas Crockordのstringifier](http://www.json.org/js.html)を試してみてください。 – kuujinbo

答えて

0

望ましくないフォームのJSONには、違反している見積もりの​​前にバックスラッシュが1つだけあります。これは、JSON構造自体に使用されている引用符と同じです。私の推測では3つあります:結果の文字列に '本当の'バックスラッシュ文字を作るには2つ、もう1つは文字列を終了させないようにすることです。 (あなたが現在持っているものは、文字列かオブジェクトのどちらかとして意味をなさないことに注意してください.SOのコードハイライトによってもたらされた事実)

あなたの質問から、引用符が自動的にエスケープされている "というメッセージが表示されます。ブラウザはJSON.stringifyでこれを行いません。私は、JSON.netが何かを混乱させないことを期待しています。そのため、ajaxリクエストを行うクライアント側、またはJSON.netに渡す中間のものが破損しています。問題がどこにあるのか把握するために、そこにあるものの詳細を投稿する必要があります。

+0

Firebugによれば、FireFoxはこれをやっています。私はFireBugのJSON.stringify(myObject)の結果を見て、投稿した最初の例とまったく同じ結果を示しています。 –

+0

Firebugを信用しないでください。文字列を引用して変数を読みやすくするという面白いことがありますが、代わりに、文字列のアクションの前にオブジェクトを調べると、 "Comment"フィールドが "test 2 \" "コンソールで次のコマンドを実行します: 'alert(JSON.stringify(myObject).toSource())'これは、文字列内のデータをチェックするのに使用できる有効なJSを生成します。 – Gijs

+0

実際には、ライブHTTPヘッダーのようなものでサーバーに送信されます。 –

関連する問題