问题
I'm trying a poc. Is possible optimize json.net schema with JSchemaValidatingReader to deserialize in object in same read of stream?
In otherworld
string schemaJson = @"{
'description': 'A person',
'type': 'object',
'properties': {
'name': {'type': 'string'},
'hobbies': {
'type': 'array',
'items': {'type': 'string'}
}
}
}";
JSchema schema = JSchema.Parse(schemaJson);
using (StreamReader s = File.OpenText(@"c:\bigdata.json"))
using (JSchemaValidatingReader reader = new JSchemaValidatingReader(new JsonTextReader(s)))
{
reader.Schema = schema;
reader.ValidationEventHandler += (sender, args) => { Console.WriteLine(args.Message); };
//Deserialize json while validating
while (reader.Read())
{
}
}
thanks
回答1:
Yes, JSchemaValidatingReader is a subclass of JsonReader, so you can use it to deserialize by passing it to JsonSerializer.Deserialize(JsonReader):
using (var s = File.OpenText(@"c:\bigdata.json"))
using (var baseReader = new JsonTextReader(s))
using (var reader = new JSchemaValidatingReader(baseReader))
{
reader.Schema = schema;
reader.ValidationEventHandler += (sender, args) => { Console.WriteLine(args.Message); };
root = JsonSerializer.CreateDefault().Deserialize<RootObject>(reader);
}
Demo fiddle here.
Related documentation: Validate JSON with JSchemaValidatingReader.
来源:https://stackoverflow.com/questions/40306330/is-possible-optimize-json-net-schema-with-jschemavalidatingreader-to-deserialize