LoginSignup
0
1

More than 3 years have passed since last update.

[C#] カスタムAttributeでJSONバリデーションを行う

Last updated at Posted at 2020-04-17

はじめに

C#のカスタムAttributeでJSONバリデーションを行う方法を紹介します。

Attributeとは

Attribute(属性)とは、クラスやメンバーに追加情報を与えることができます。属性にはパラメータを指定することができ、複数の属性を指定することができます。

[属性名(属性パラメータ)]
メンバーの定義

環境設定

今回実行した環境は下記の通りです。

実行環境
Microsoft .NET Framework 3.5

使いかた

下記のソースコードから Validator フォルダーを各自のプロジェクトにコピーします。
ソースファイルはこちら

JSONオブジェクトを引数にして ValidatorMapper クラスのインスタンスを生成して実行します。

ValidatorMapper validator = new ValidatorMapper(this.reqObj);
validator.Execute();

バリデーションAttribute

Required

Required は、必須チェックを行う属性です。リクエストパラメータに値が指定されていない場合にエラーを返します。

実装例
[Required]
[JsonProperty("userName")]
public string UserName { get; set; }

userName がリクエストパラメータに指定されていない場合は、下記のエラーレスポンスが返されます。

エラーレスポンス
{
    "code": 1004,
    "message": "\"userName\" is a required field."
}

StringLength

StringLength は、文字列長チェックを行う属性です。文字列型のリクエストパラメータの長さが超えた場合にエラーを返します。

実装例
[StringLength(max = 30)]
[JsonProperty("userName")]
public string UserName { get; set; }

userName の値が30文字より長い場合は、下記のエラーレスポンスが返されます。

エラーレスポンス
{
    "code": 1004,
    "message": "\"userName\"(1234567890123456789012345678901) exceeds the number of characters 30 digits."
}

StringDateFormat

StringDateFormat は、日付フォーマットチェックを行う属性です。文字列型のリクエストパラメータの日付フォーマットが正しくない場合にエラーを返します。

実装例
[StringDateFormat("yyyyMMdd")]
[JsonProperty("createDate")]
public string CreateDate { get; set; }

createDate の値がyyyyMMdd形式でない場合は、下記のエラーレスポンスが返されます。

エラーレスポンス
{
    "code": 1004,
    "message": "\"createDate\"(20200401abc) should be entered in the form yyyyMMdd."
}

NumberRange

NumberRange は、数値範囲チェックを行う属性です。数値型のリクエストパラメータの値が範囲外の場合にエラーを返します。

実装例
[NumberRange(from = 0, to = 120)]
[JsonProperty("age")]
public int Age { get; set; }

age の値が0~120の範囲外の場合は、下記のエラーレスポンスが返されます。

エラーレスポンス
{
    "code": 1004,
    "message": "\"age\"(130) is from 0 to 120."
}

ClassValue

ClassValue は、区分値チェックを行う属性です。リクエストパラメータに値が取りうる区分値以外の場合にエラーを返します。

実装例
[ClassValue(new int[] { 0, 1 })]
[JsonProperty("gender")]
public int Gender { get; set; }

gender の値が0,1以外の場合は、下記のエラーレスポンスが返されます。

エラーレスポンス
{
    "code": 1004,
    "message": "\"gender\"(2) is an unavailable value."
}

以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1