RazorJam.Insightly
のgithubプロジェクトで この問題 を提起しました。ご覧のように、取得している特定のアイテムのためにエラーが発生していることがわかります。 JSONからオブジェクトに逆シリアル化すると、ADDRESS_ID
の値が大きすぎてint
に収まりません。
最初に、見つけたすべてのId
フィールドをstring
またはlong
に修正する変更リクエストを送信したかったのですが、どちらが最適かわかりませんでした。
次に、最初に長さを確認してから、それがInt32
に収まるかどうかに基づいて割り当てる可能性もありますが、コードを追加してパフォーマンスに影響を与える可能性があるため、これはおそらく最良のオプションではありません。
ただし、他のユーザーがこのコードを使用している可能性があるため、int
の値に依存している場合、タイプを変更するとプロジェクトが壊れる可能性があるため、チェックが最善のオプションでしょうか?
もちろん、ローカルコピーを保存して必要な変更を加えることもできますが、すべての人に役立つパブリックバージョンを用意するのが最善のようです。
現在の実装
[JsonProperty(PropertyName = "ADDRESS_ID", NullValueHandling = NullValueHandling.Ignore)]
public int Id { get; set; }
オプション1
[JsonProperty(PropertyName = "ADDRESS_ID", NullValueHandling = NullValueHandling.Ignore)]
public string Id { get; set; }
OR
[JsonProperty(PropertyName = "ADDRESS_ID", NullValueHandling = NullValueHandling.Ignore)]
public long Id { get; set; }
オプション2
private object _id;
[JsonProperty(PropertyName = "ADDRESS_ID", NullValueHandling = NullValueHandling.Ignore)]
public object Id
{
get { return _id; }
set { _id = (long)value > int.MaxValue ? (long)value : (int)value; } }
}
誰かがこれについて共有できる考えやアドバイスはありますか?どんな助けでも大歓迎です、そしてこれがこれのための間違ったフォーラムであるならば謝罪してください!
文字列は、JsonおよびC#との間で数値を相互に変換するための最も安全なオプションです。 JSONには精度に関する制限があり、大きな整数で問題が発生する可能性があります。 JSON仕様 によると、実装は精度を倍精度(64ビット)数の精度に制限する必要があります。たとえば、C#long
で正確に表すことができる長い数値767946224062369796
は、倍精度浮動小数点数として表すことができず、JSONデコーダーによって767946224062369792
として解析される場合があります。識別子については、精度が最も重要なので、string
識別子を使用することをお勧めします。
BigInteger
を使用することもできますが、これはIDであり、数学では使用されないため、それほど多くの理由はありません。
あなたが言ったように、これは重大な変更になるので、彼らはそれをしないことを決定するかもしれません、またはそれは次のメジャーバージョンまで待つ必要があるかもしれません。