2017-01-24 8 views
1

私は自然にたくさんの中括弧を含む長いJSON文字列を持っています。私は中かっこを2つの開閉括弧を使ってエスケープしました(stackoverflowに関するいくつかの前の記事の推奨事項です)。私はまだエラーを取得:VS2015 C#string.Formatはエスケープされた中括弧を使用するとエラーをスローする

System.FormatException : Input string was not in a correct format.

はここに短縮例です:

var json = string.Format([email protected]"{{""{data.GraphId}""}}"); 

は何もフォーマットがどのように機能するか変わりましたか? 中括弧をエスケープする正しい方法は何ですか?

+1

なぜJSONライブラリを使用しなかったのですか? – Rabban

+5

なぜ 'string.Format'と補間された文字列(文字列の前に' $ ')を混ぜていますか?補間された文字列の全体の考え方は 'string.Format'を置き換えることで、コードはそれほど冗長ではありません。 – juharr

+0

いいえ 'string.Format'は必要ありません:' var json = $ "{{{data.GraphId}}};"、 '$" \ "{{{data.GraphId}}} \" "' –

答えて

4

文字列補間はちょうどstring.Formatの呼び出しに変わります。インナーstring.Formatがそれを完了するとあなたはstring.Formatに渡す文字列は、次の

string.Format(@"{{""{0}""}}", data.GraphId) 

のようなものに

[email protected]"{{""{data.GraphId}""}}" 

から変更されますので、あなたのコードは

string.Format(string.Format(@"{{""{0}""}}", data.GrpahId)); 

に相当します次のようになると仮定します。data.GrpahIdは5となります。

string.Format(@"{""5""}"); 

これで、前に区切られた中括弧が区切られなくなったことがわかりました。解決策は、string.Formatの補間された文字列を使用しないことです。何らかの理由で中括弧を二重にしなければならない場合です。

別のこととして、Jsonを扱う場合は、自分でフォーマットするのではなく、ライブラリを使用するだけです。

+0

ありがとう、それは私の問題を解決しました。構造はld + jsonと複雑です。ライブラリを使用する方が簡単になるかどうかはわかりません。どんな勧告? – JohnCambell

+0

私はJson.Netを使用しました。あなたの複雑な状況に対処するにはいくつかの作業が必要になるかもしれませんが、おそらくJsonを自分で構築するよりも簡単です。 – juharr

関連する問題