2016-07-25 30 views
2

Ich benutze JSON.Schema Validierung meiner Nutzlast. Eines der Felder, das ein Datum ist, hat das folgende json-Schema.Json Schema Datum validitaiton

Auf meiner Serverseite (WEB API C#) ich validiere das JSON wie folgt.

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

gebe ich mein Date als „24.09.2012“ und es kommt zurück, wie die unten Fehler:

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

Was bin ich?

Antwort

2

Das Datum wird voraussichtlich im Format JJJJ-MM-TT angezeigt, wenn "format": "date" angegeben ist.

Wenn Sie es gegen ein anderes Format validieren Sie benutzerdefinierten Validator definieren:

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"; 
} 

Verwenden Sie es in Schema-Definition: "format": "custom-date" und in Schema Leser Einstellungen:

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

Ich kann Ihnen gar nicht genug danken für dieses. – Immortal