public CustomUserInfoEndpointValidator( IJsonSchemaStore jsonSchemaStore, ILogger <CustomUserInfoEndpointValidator> logger) { _logger = logger; _jsonSchemaValidator = jsonSchemaStore.GetSchema(JsonSchema.DelegationMask); }
public void Merge(IJsonSchemaValidator obj) { var rhs = obj as JsonObjectValidator; if (rhs == null) { throw new ArgumentException(); } foreach (var x in rhs.Properties) { if (this.Properties.ContainsKey(x.Key)) { this.Properties[x.Key] = x.Value; } else { this.Properties.Add(x.Key, x.Value); } } foreach (var x in rhs.Required) { this.Required.Add(x); } if (rhs.AdditionalProperties != null) { if (AdditionalProperties != null) { throw new NotImplementedException(); } AdditionalProperties = rhs.AdditionalProperties; } }
public static void Serialize(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c, T o) { if (s_serializer == null) { var t = typeof(T); MethodInfo g = null; if (t.IsArray) { var mi = typeof(JsonArrayValidator).GetMethod("ArraySerializer", BindingFlags.Static | BindingFlags.NonPublic); g = mi.MakeGenericMethod(t.GetElementType()); } else if (t.GetIsGenericList()) { // ToDo: IList var mi = typeof(JsonArrayValidator).GetMethod("ListSerializer", BindingFlags.Static | BindingFlags.NonPublic); g = mi.MakeGenericMethod(t.GetGenericArguments()); } else { throw new NotImplementedException(); } var vv = Expression.Parameter(typeof(IJsonSchemaValidator), "v"); var ff = Expression.Parameter(typeof(IFormatter), "f"); var cc = Expression.Parameter(typeof(JsonSchemaValidationContext), "c"); var oo = Expression.Parameter(typeof(T), "o"); var call = Expression.Call(g, vv, ff, cc, oo); var compiled = (Action <IJsonSchemaValidator, IFormatter, JsonSchemaValidationContext, T>)Expression.Lambda(call, vv, ff, cc, oo).Compile(); s_serializer = new Serializer(compiled); } s_serializer(v, f, c, o); }
public JsonSchemaValidateAttribute( JsonSchema jsonSchema, IJsonSchemaStore schemaStore, ILogger <JsonSchemaValidateAttribute> logger) { _schema = schemaStore.GetSchema(jsonSchema); _logger = logger; }
public static JsonSchema FromType(Type t, JsonSchemaAttribute a = null, // field attribute ItemJsonSchemaAttribute ia = null ) { if (a == null) { // get class attribute a = t.GetCustomAttributes(typeof(JsonSchemaAttribute), true) .FirstOrDefault() as JsonSchemaAttribute; } if (a == null) { a = new JsonSchemaAttribute(); } if (ia == null) { ia = t.GetCustomAttributes(typeof(ItemJsonSchemaAttribute), true) .FirstOrDefault() as ItemJsonSchemaAttribute; } IJsonSchemaValidator validator = null; bool skipComparison = a.SkipSchemaComparison; if (t == typeof(object)) { skipComparison = true; } if (a.EnumValues != null) { validator = JsonEnumValidator.Create(a.EnumValues); } else if (t.IsEnum) { validator = JsonEnumValidator.Create(t, a.EnumSerializationType, a.EnumExcludes); } else { validator = JsonSchemaValidatorFactory.Create(t, a, ia); } var schema = new JsonSchema { Title = a.Title, Description = a.Description, Validator = validator, SkipComparison = skipComparison }; return(schema); }
public void Merge(IJsonSchemaValidator obj) { var rhs = obj as JsonStringValidator; if (rhs == null) { throw new ArgumentException(); } MaxLength = rhs.MaxLength; MinLength = rhs.MinLength; Pattern = rhs.Pattern; }
private static void ListSerializer <U>(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c, List <U> list) { f.BeginList(list.Count); { //int i = 0; foreach (var x in list) //using (c.Push(i++)) { v.Serialize(f, c, x); } } f.EndList(); }
private static void ArraySerializer <U>(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c, U[] array) { f.BeginList(array.Length); { //int i = 0; foreach (var x in array) //using (c.Push(i++)) { v.Serialize(f, c, x); } } f.EndList(); }
public void Merge(IJsonSchemaValidator obj) { var rhs = obj as JsonIntValidator; if (rhs == null) { throw new ArgumentException(); } MultipleOf = rhs.MultipleOf; Maximum = rhs.Maximum; ExclusiveMaximum = rhs.ExclusiveMaximum; Minimum = rhs.Minimum; ExclusiveMinimum = rhs.ExclusiveMinimum; }
public static void Serialize(IJsonSchemaValidator v, IFormatter f, JsonSchemaValidationContext c, T o) { if (s_serializer == null) { var t = typeof(T); MethodInfo g = null; if (t.IsArray) { var mi = typeof(JsonArrayValidator).GetMethod("ArraySerializer", BindingFlags.Static | BindingFlags.NonPublic); g = mi.MakeGenericMethod(t.GetElementType()); } else if (t.GetIsGenericList()) { // ToDo: IList var mi = typeof(JsonArrayValidator).GetMethod("ListSerializer", BindingFlags.Static | BindingFlags.NonPublic); g = mi.MakeGenericMethod(t.GetGenericArguments()); } else { throw new NotImplementedException(); } var compiled = (Action < IJsonSchemaValidator, IFormatter, JsonSchemaValidationContext, T>) GenericInvokeCallFactory.StaticAction < IJsonSchemaValidator, IFormatter, JsonSchemaValidationContext, T>(g); s_serializer = new Serializer(compiled); } s_serializer(v, f, c, o); }
public void Assign(IJsonSchemaValidator obj) { var rhs = obj as JsonObjectValidator; if (rhs == null) { throw new ArgumentException(); } foreach (var x in rhs.Required) { this.Required.Add(x); } if (rhs.AdditionalProperties != null) { if (AdditionalProperties != null) { throw new NotImplementedException(); } AdditionalProperties = rhs.AdditionalProperties; } }
/// <summary> /// Create serializer /// </summary> /// <param name="jsonSchemaValidator"></param> /// <param name="providers"></param> public NewtonSoftJsonSerializer( IEnumerable <IJsonSerializerConverterProvider> providers = null, IJsonSchemaValidator jsonSchemaValidator = null ) { // If no json schema validator is provided use default one. _jsonSchemaValidator = jsonSchemaValidator ?? new JsonSchemaDotNetSchemaValidator(); var settings = new JsonSerializerSettings(); if (providers != null) { foreach (var provider in providers) { settings.Converters.AddRange(provider.GetConverters()); } } settings.ContractResolver = new DefaultContractResolver { NamingStrategy = new CamelCaseDictionaryKeys() }; settings.Converters.Add(new JsonVariantConverter(this)); settings.Converters.Add(new StringEnumConverter { AllowIntegerValues = true, NamingStrategy = new CamelCaseNamingStrategy() }); settings.FloatFormatHandling = FloatFormatHandling.String; settings.FloatParseHandling = FloatParseHandling.Double; settings.DateParseHandling = DateParseHandling.DateTime; settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; settings.DateFormatHandling = DateFormatHandling.IsoDateFormat; settings.ReferenceLoopHandling = ReferenceLoopHandling.Error; if (settings.MaxDepth > 64) { settings.MaxDepth = 64; } Settings = settings; }
public static JsonSchema FromType(Type t, BaseJsonSchemaAttribute a = null, // field attribute ItemJsonSchemaAttribute ia = null ) { // class attribute var aa = t.GetCustomAttributes(typeof(JsonSchemaAttribute), true) .FirstOrDefault() as JsonSchemaAttribute; if (a != null) { a.Merge(aa); } else { if (aa == null) { a = new JsonSchemaAttribute(); } else { a = aa; } } if (ia == null) { ia = t.GetCustomAttributes(typeof(ItemJsonSchemaAttribute), true) .FirstOrDefault() as ItemJsonSchemaAttribute; } IJsonSchemaValidator validator = null; var skipComparison = a.SkipSchemaComparison; if (t == typeof(object)) { skipComparison = true; } if (a.EnumValues != null) { try { validator = JsonEnumValidator.Create(a.EnumValues, a.EnumSerializationType); } catch (Exception) { throw new Exception(String.Join(", ", a.EnumValues.Select(x => x.ToString()).ToArray())); } } else if (t.IsEnum) { validator = JsonEnumValidator.Create(t, a.EnumSerializationType, a.EnumExcludes); } else { validator = JsonSchemaValidatorFactory.Create(t, a, ia); } var schema = new JsonSchema { Title = a.Title, Description = a.Description, Validator = validator, SkipComparison = skipComparison, ExplicitIgnorableValue = a.ExplicitIgnorableValue, ExplicitIgnorableItemLength = a.ExplicitIgnorableItemLength, }; return(schema); }
public void Assign(IJsonSchemaValidator obj) { throw new NotImplementedException(); }
public void Merge(IJsonSchemaValidator rhs) { throw new NotImplementedException(); }