2017-02-19 20 views
1

Web APIがint値を期待している場合、クライアントがJSONでnullまたは空の文字列を送信すると、自動的に0に変換されます。そのような構成はありますか?私はそれが期待どおりではないので、エラーを投げて欲しいです。Newtonsoft Json.Netヌルまたは空の文字列の変換

答えて

4

あなたはJsonPropery属性であなたのDTO /プロパティに注釈を付け、必要に応じてそれをマークすることができます。

public class MyDto 
{ 
    [JsonProperty(Required = Required.Always)] 
    public int RequiredProperty { get;set; } 
} 

この属性では、プロパティの値がJSON文字列で指定されていない場合JsonConvert.DeserializeObject()が例外をスローします。

は、例えばここを参照してください:https://dotnetfiddle.net/TstCau

+0

実際には、クライアントがAPIを誤って使用して、要求されたint(intではない)をnullまたは ""送る可能性があります。これにより、0に逆シリアル化されますが、これは間違っています。私の知る限り、あなたの提案した解決策はこれを防ぐものではありません。要するに、私が望むのは、この自動変換動作を防ぐことです。 –

+0

@ JohnL.I私はサンプルを修正し、 ''RequiredProperty': '''を渡しても、まだ例外が発生します。私が正しく理解すれば、それはあなたが望むものです。 (https://dotnetfiddle.net/Fhy5Bfを参照) – M4N

+0

私の間違い、私はあなたの答え、おかげで受け入れるでしょう。 –

0

"int"として宣言することで、整数の中にnullを入れることができます。

この後、変数がnullに等しいかどうかを確認してエラーメッセージを表示できます。

+0

私はすべてのデータモデルを不正形式にしてそのようなチェックを追加したくありません。私がしたいのは、apiの誤った使用を防ぐことです。誤ってnullが送られたり、送られても0にはならないようにします。つまり、要するにこの自動変換動作を変更したいのです。 –

+0

ああ私はそのときの質問を誤解しました。申し訳ありませんが、可能かどうかわかりません。 – Rick

0

また、このソリューションはかなりハックされ、定期的に使用すべきではありません。しかし、ここに行く。

私は問題がありました - 文字列ではなく、列挙型としてコード内に入れたいと思っていました。

は、私はちょうど私があなたがそのような変換ロジックをオーバーライドするかもしれないと思う次

/// <summary> 
    /// Required. A type of the metric for which data is requested. 
    /// </summary> 
    public Metrics MetricType { get; set; } 
    [Required] 
    /// <summary> 
    /// Alias for MetricType. 
    /// </summary> 
    public string Type 
    { 
     get 
     { 
      return MetricType.ToString(); 
     } 
     set 
     { 
      try 
      { 
       MetricType = value.ToEnum<Metrics>(); 
      } 
      catch (System.Exception) 
      { 
       throw new ArgumentException("Invalid Type parameter."); 
      } 
     } 
    } 

のようにゲッターとセッターをしてオーバーライド(一部のデータが[NotMapped]のように、そこに属性置いてもよい)余分なプロパティを置きます。あなたの文字列がヌルか空かをチェックし、intに適切な値を割り当てます。

関連する問題