はじめに
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."
}
以上です。