2012-01-18 13 views
2

私はJson.NETを使用して、ノートパッドで読み取り可能なJSONファイルを出力しています。非常に小さな数値(-0.000004)が科学的表記法に変換されることを除いて、出力はほぼ完璧です。これは私の意図ではありません。Json.NETの数値書式 "R"

私はソースをダウンロードしてJsonConvert.cs中 - JsonConvert.ToString(ダブル)、私はラインを参照してください、

value.ToString("R", CultureInfo.InvariantCulture) 

C#数値フォーマットのドキュメントによると、「R」は、ラウンドトリップを保証する必要がありますが科学的表記に変換されませんが、それはありません。フォーマット文字列を"0.############"に変更しました。しかしこれは正しいアプローチですか?

答えて

3

私は、「0。##########」が正しいアプローチだと理解しています。the documentationによれば、ラウンドトリップフォーマット科学的記法を使用しても使用しなくてもよい。唯一の保証は、「文字列に変換された数値は、同じ数値に解析され戻されます」ということです。私は科学的記法を使わないことについて何も見ない。

常に特定の桁数にしたい場合は、Fixed Point形式を使用できます。

value.ToString("F8"); // will be 8 digits 
1

汎用ライブラリとして、私はJSON.NETが往復形式を使用して正しいことをしていると思います。これにより、情報が失われないことが保証されます。実用的な観点から見ると、科学記法は十進表記よりもはるかに短くなる可能性があります(1e-200は200文字以上必要です)ので、やはりラウンドトリップ形式を実装するこのアプローチが正しいと思われます。

あなたの使用方法も完全に有効です。しかし、第三者のライブラリのソースコードを変更することには、それ自体の問題があります。新しいJSON.NETバージョンを入手するたびに、同じ変更を適用する必要があります。ある時点で、ライブラリの内部動作が変わる可能性があり、この修正はもう機能しなくなります。

私の見解では、可能な場合は自分が持っているもので作業するのが最善です。この場合、カスタムコンバーターを作成し、プロパティにJsonConverter属性を適用することができます。これは本当に簡単です:既存の日付/時刻コンバータは、あなたに頭を下げ始めるはずです。