我有简单的JSON对象和JSON模式。 JSON对象属性Name是String。在Schema中我期待整数。 IsValid方法返回true。我认为它应该返回false,因为有类型错配。我错过了什么?
//json
var hero = new Hero();
hero.Name = "Egid Beyond Meta";
hero.BattleRank = 5000;
var output = JsonConvert.SerializeObject(hero);
var deserialized = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(output);
// schema
string schema = @"{
'title' : 'Hero',
'type' : 'object',
'Name' : {'type' : 'integer'},
'BattleRank' : {'type' : 'integer'},
required: [ 'Name', 'BattleRank']
}";
var jsonSchema = JSchema.Parse(schema);
// returns ture
Console.WriteLine("is valid " + deserialized.IsValid(jsonSchema));
Console.ReadLine();
答案 0 :(得分:2)
您必须在架构的properties
属性中定义对象属性,如下所示:
string schema = @"{
'title' : 'Hero',
'type' : 'object',
'properties': {
'Name' : {'type' : 'integer'},
'BattleRank' : {'type' : 'integer'},
},
required: [ 'Name', 'BattleRank']
}";
答案 1 :(得分:2)
您的架构不正确应该是:
{
"type": "object",
"properties": {
"Name" : { "type": ["string"]},
"BattleRank": { "type": "integer"}
},
"required": ["Name","BattleRank"]
}
使用架构生成器(Netonsoft.Json.Schema
)命名空间/ nuget包
JSchemaGenerator generator = new JSchemaGenerator();
JSchema schema = generator.Generate(typeof(Hero));
schema.ToString();