能否验证JSON Schema中默认值类型与属性类型匹配?
关于JSON Schema默认值与属性类型匹配的验证问题
问题1:能否验证JSON Schema中的默认值类型与属性类型是否匹配?
JSON Schema规范本身没有强制要求默认值必须匹配属性的类型,因此标准的JSON Schema验证器不会将这种情况判定为错误。但你可以通过自定义逻辑来检查这种类型不一致的问题。
问题2:给出的代码是否会抛出错误,或能否通过jsonSchemaObj的方法发现类型不一致?
代码反序列化阶段不会报错
你提供的这段C#代码在反序列化时不会抛出错误。JsonSerializer.Deserialize只是将JSON字符串解析为JsonSchema对象,它只处理JSON结构的正确性,不会验证Schema的语义规则(比如默认值与属性类型是否匹配)。
无法直接通过jsonSchemaObj的内置方法发现问题
JsonSchema对象本身没有内置方法来自动检查默认值与属性类型的一致性。你需要手动编写验证逻辑来实现这一点。
自定义检查的示例代码
针对你给出的Schema,可以编写如下逻辑来检测类型不一致:
// 遍历Schema中的所有属性 foreach (var prop in jsonSchemaObj.Properties) { var propName = prop.Key; var propSchema = prop.Value; // 仅当属性有默认值且明确指定类型时检查 if (propSchema.Default != null && propSchema.Type != null) { // 判断默认值的实际JSON类型 var defaultValueType = propSchema.Default.ValueKind switch { JsonValueKind.True or JsonValueKind.False => "boolean", JsonValueKind.Number => "number", JsonValueKind.String => "string", JsonValueKind.Object => "object", JsonValueKind.Array => "array", _ => "unknown" }; // 对比预期类型与实际默认值类型(此处简化处理单类型场景) var expectedType = propSchema.Type.ToString().ToLower(); if (defaultValueType != expectedType) { Console.WriteLine($"属性 {propName} 的默认值类型不匹配:预期 {expectedType},实际 {defaultValueType}"); } } }
运行这段代码会输出:属性 isCommander 的默认值类型不匹配:预期 boolean,实际 string,以此发现类型不一致问题。
内容的提问来源于stack exchange,提问作者Lombas
相关产品推荐
相关产品推荐

