2016-07-25 42 views
2

我正在使用JSON.Schema驗證我的有效內容。日期之一的字段具有以下json模式。Json Schema日期驗證

"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

預計日期格式爲yyyy-MM-dd指定"format": "date"時。

如果您想驗證它與另一個格式,你可以自定義的驗證:

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