この記事でSystem.Text.Jsonを使ってみたんだけど、Newtonsoftの方はエラーなく上手く読み込んでくれたのに、System.Text.Jsonはエラーを吐き続けました。
なんでだろう?と思って検証してみたら、囲い字が原因だった。
今回はエラーになった現象についてのお話。
エラーになった箇所
System.Text.Jsonのデシリアライズ部分。コードは上に貼った記事の中にあります。
"latitude": -85.33021
そしてこんな感じのデータを読み込もうとしました。stringで。
そしたらエラーが出ました。System.Text.JsonException、名前から疑う余地もなくSystem.Text.Jsonがエラーを吐いています。
"latitude": "-85.33021"
そして囲い字を付けたら、エラーが出なくなるという。
逆に囲い字付けたら数値型で読み込めるのか
今度は逆パターン。
"latitude": "85"
これをintとして読み込めるのかどうかを確認してみます。
無理でした!!!
"latitude": 85
囲い字をなくせばintとして問題なく読み込めるようです……。
解決策
MSDNに解決策が書いてありました!JsonSerializerOptionsをデシリアライズの引数として渡さないといけないようです。
JsonSerializerOptions.NumberHandling を WriteAsString または AllowReadingFromString に設定するか、System.Text.Json 属性を使用します。
MSDNより引用
現状Newtonsoft.Jsonであれば何もせずに読み込めるので、この設定の手間を惜しむならNewtonsoft.Jsonがオススメ。速いし。