@@ -13,6 +13,16 @@ public class Entity
1313 [ JsonIgnore ] private JSchema _extensionDataJsonSchema ;
1414 [ JsonExtensionData ] private readonly IDictionary < string , JToken > _data = new Dictionary < string , JToken > ( ) ;
1515
16+ /// <summary>
17+ /// Enables auto-validation of object against JsonSchema on add attempt.
18+ /// </summary>
19+ [ JsonIgnore ] public bool AutoValidate { get ; set ; }
20+
21+ public Entity ( )
22+ {
23+ AutoValidate = true ;
24+ }
25+
1626 /// <summary>
1727 /// Get Full JSON Schema including class properties and configured flexible data schema.
1828 /// </summary>
@@ -93,15 +103,18 @@ private void Set(string key, object value)
93103 {
94104 var token = JToken . FromObject ( value ) ;
95105
96- if ( _extensionDataJsonSchema != null )
106+ if ( AutoValidate )
97107 {
98- var obj = JObject . FromObject ( _data ) ;
99- obj [ key ] = token ;
108+ if ( _extensionDataJsonSchema != null )
109+ {
110+ var obj = JObject . FromObject ( _data ) ;
111+ obj [ key ] = token ;
100112
101- if ( ! obj . IsValid ( _extensionDataJsonSchema , out IList < ValidationError > errors ) )
102- throw new JsonEntityValidationException (
103- $ "Validation for value { token } failed against JSON schema { _extensionDataJsonSchema } .",
104- errors ) ;
113+ if ( ! obj . IsValid ( _extensionDataJsonSchema , out IList < ValidationError > errors ) )
114+ throw new JsonEntityValidationException (
115+ $ "Validation for value { token } failed against JSON schema { _extensionDataJsonSchema } .",
116+ errors ) ;
117+ }
105118 }
106119
107120 _data [ key ] = token ;
@@ -132,5 +145,21 @@ object JTokenToObject(JToken source)
132145 value = null ;
133146 return false ;
134147 }
148+
149+ /// <summary>
150+ /// Validates if current entity state is valid against JsonSchema.
151+ /// </summary>
152+ /// <exception cref="JsonEntityValidationException"></exception>
153+ public void Validate ( )
154+ {
155+ if ( _extensionDataJsonSchema == null ) return ;
156+
157+ var obj = JObject . FromObject ( _data ) ;
158+
159+ if ( ! obj . IsValid ( _extensionDataJsonSchema , out IList < ValidationError > errors ) )
160+ throw new JsonEntityValidationException (
161+ $ "Validation failed against JSON schema { _extensionDataJsonSchema } .",
162+ errors ) ;
163+ }
135164 }
136165}
0 commit comments