2016-07-25 25 views
2

私はペイロードのJSON.Schema検証を使用しています。日付のフィールドの1つに次のjsonスキーマがあります。Jsonスキーマ日付のバリデーション

"Date": {    
     "type": "object", 
     "properties": { 
      "Value": { 
       "type": "string", 
       "format": "date" 
      } 
     }, 
     "required": [ "Value" ], 
     "additionalProperties": false 
    } 

私のサーバー側(WEB API C#)では、次のようにjsonを検証しています。

var schema = JSchema.Parse(jsonSchema); 
var livestockRow = JObject.Parse(jsonData); 
IList<ValidationError> errorMessages; 
livestockRow.IsValid(schema, out errorMessages); 

私は「24/09/2012」としての私の日付を渡し、それが以下のエラーとして戻ってくる:私は何をしないのです

String '24/09/2012' does not validate against format 'date'. 

答えて

2

"format": "date"を指定すると、日付はyyyy-MM-ddの形式になると予想されます。

あなたは他のフォーマットに対してそれを検証したい場合は、カスタムバリデータを定義することができます。

public class CustomDateValidator : JsonValidator 
{ 
    public override void Validate(JToken value, JsonValidatorContext context) 
    { 
     if (value.Type != JTokenType.String) 
     { 
      return; 
     } 

     var stringValue = value.ToString(); 
     DateTime date; 
     if (!DateTime.TryParseExact(stringValue, "dd/MM/yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out date)) 
     { 
      context.RaiseError($"Text '{stringValue}' is not a valid date."); 
     } 
    } 

    public override bool CanValidate(JSchema schema) => schema.Format == "custom-date"; 
} 

は、スキーマ定義でそれを使用してください:"format": "custom-date"とスキーマリーダーの設定で:

var schema = JSchema.Parse(jsonSchema, new JSchemaReaderSettings { Validators = new JsonValidator[] { new CustomDateValidator() } }); 
+0

私は十分に感謝することはできませんこれのために。 – Immortal