问题标签 [njsonschema]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
njsonschema - NJsonSchema - 从嵌入式资源生成 C#
我有一组嵌入在我想为其生成 C# pocos 的 dll 中的模式。所有模式的 id 都包含一个命名方案,例如:http://somewebsite.com/schemaname/1.0.0。其中许多模式通过 id 标签引用其他模式。
对于验证,我使用 Newtonsoft 和 JSchemaPreloadedResolver(我使用新的 JSchemaReaderSettings { ResolveSchemaReferences = false } 加载模式)并且能够验证模式。
接下来,我想为所有嵌入式资源生成 C# 对象。当我使用引用另一个模式(通过 id)的模式调用 JsonSchema.FromJsonAsync 时,我收到一个
“无法解析 JSON 路径 'http://somewebsite.com/schemaname/1.0.0”。
如何将这些架构注册到解析器并让解析器通过 id 查找正确的架构?
感谢您的帮助!
asp.net-core - 如何从类型的给定属性中找到相应的 JsonSchema 属性?
在 OpenAPI 中,您可以为字符串数组中的项目指定 maxLength。使用 DataAnnotations,您不能开箱即用地执行此操作,因此我为它创建了一个相当通用的自定义 ValidationAttribute(这是我现在要做的,只是为了让它工作)。
我现在想将此传播到 OpenAPI 规范,该规范是使用 NSwag 从代码生成的。我正在使用 ISchemaProcessor,但我不知道如何从 Type 属性获取 JsonSchema 属性。
我在生成器上发现了 GetPropertyName,但这需要一个 JsonProperty 对象,所以我仍然遇到同样的问题。
我可以尝试自己从实际的属性名称和/或 JsonPropertyAttribute 数据中派生 json 模式属性名称,但如果实现会在未来版本中更改/扩展,我不想更新此代码,它应该继续工作.
编辑:到目前为止我能想到的最好的是:
还有其他想法吗?
jsonschema - JSON Schema 相对引用解析
我正在尝试定义一个有效的 JSON 模式,但当被引用的组件位于子目录中时,我不确定如何构造引用 ("$ref") 值。我已经(详细地)阅读了官方 JSON Schema 站点上的信息,并检查了来自各种 JSON Schema 解析器的测试数据,但是可用的信息要么不清楚要么不可用(或者,当然,我找不到它尽管搜索了几个小时)...
我需要的具体帮助是确认组件目录中文件的引用(引用组件目录中的文件)是否应该在引用中用“组件”定义。(请注意,$id 不可用于提供基本 URI)。
换句话说,“message.schema.json”中的引用应该是:
- 选项 1:“components/key.schema.json”和“components/data.schema.json”,或者,
- 选项2:“key.schema.json”和“data.schema.json”(如下图)
在选项 1 中,“$ref”相对于父路径(“main.schema.json”),在选项 2 中,它相对于当前路径(“message.schema.json”)。
以下是提供进一步背景的信息。
文件结构比较简单,如下图所示:
文件内容如下所示...
main.schema.json:
上面的 JSON Schema 引用了“components”目录(main.schema.json 文件下的一个目录)中的文件。
message.schema.json:
并且上面的 message.schema.json 引用了与 message.schema.json 文件位于同一目录中的以下组件:
key.schema.json:
数据.schema.json:
.net-core - 带有 NJsonSchema C# CodeGeneration 的 CamelCase 属性名称
有人知道配置 NJsonSchema 以使用 CamelCase 属性命名进行代码生成的方法吗?我有一个带有属性名称的 JSON 模式,message_id
它导致 C# 属性名称“Message_id”,即“MessageId”应该是一种更像 C# 的方式。
使用像 '[JsonProperty("message_id"]' 这样的属性,指定不同名称之间的连接是没有问题的。
c# - 将 json 模式转换为没有属性的 ac# poco
我正在寻找将一个简单的 json 模式转换为 ac# poco。
我正在使用 NJsonSchema 来做到这一点,它做得很好。但是,我希望创建没有任何在序列化时会失败的属性的 POCO。我想填充 C# 对象,然后让 json 模式验证运行。如果需要某些东西或 null 让 poco 填充,然后允许我对其进行序列化,然后可能会在针对模式的 json 验证上失败。
NJsonSchema 在很多方面都很完美,但是我找不到在生成时取消属性 JsonProperty 的方法。
这是我的 NJsonSchema 代码生成代码。
这是生成的类
c# - NjsonSchema验证如果Property1等于Something然后需要Property2
我似乎无法让 const 或 enum 作为 if-then-else JSON 模式验证的一部分工作。
当涉及 1 个验证值时,它们似乎可以互换。(参考)
这是我的 JSON 模式
如果 Forename = "Someone" 我希望姓氏是必需的。
这是我序列化后的jsonObject:
验证码:
现在它仍然需要姓氏,即使枚举 Soameonea != 某人和我只需要标题。<== 问题 1
在 JSON 模式中,如果我设置 "Surname":{"type":["string","null]} 然后错误消失,如果我将 Forename 枚举的 if 条件更改为“某人”。<== 第 2 期
如果我用 Const 替换 Enum,我将无法获得不同的验证输出,因此,如果我能让一个工作,我确信另一个会跟随。
我找到了这个问题的几个答案(答案 1),我尝试实现同样的事情,但由于某种原因,它在我的情况下失败了。
我错过了什么?
c# - 重用具有多个验证限制的单一引用模式
我有一个架构,我想将其用于 2 个属性:
现在我希望 prop2 应该针对公共模式中提到的 requiredproperties 进行验证,但 prop1 不应该。由于此 ref 架构是共享的,因此我无法将所需的属性保留在 commonschema 中。有没有一种方法可以在 ref 架构上添加这些验证,而无需直接将它们添加到其中?
另请注意,我在 c# 中动态创建此模式,因此不确定如何在模式中对条件要求条件进行编程。有没有办法在 commonschema 中满足此条件,如果其父模式 title=="prop2" 那么应用必填字段验证