问题标签 [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.

0 投票
0 回答
55 浏览

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 查找正确的架构?

感谢您的帮助!

0 投票
0 回答
39 浏览

asp.net-core - 如何从类型的给定属性中找到相应的 JsonSchema 属性?

在 OpenAPI 中,您可以为字符串数组中的项目指定 maxLength。使用 DataAnnotations,您不能开箱即用地执行此操作,因此我为它创建了一个相当通用的自定义 ValidationAttribute(这是我现在要做的,只是为了让它工作)。

我现在想将此传播到 OpenAPI 规范,该规范是使用 NSwag 从代码生成的。我正在使用 ISchemaProcessor,但我不知道如何从 Type 属性获取 JsonSchema 属性。

我在生成器上发现了 GetPropertyName,但这需要一个 JsonProperty 对象,所以我仍然遇到同样的问题。

我可以尝试自己从实际的属性名称和/或 JsonPropertyAttribute 数据中派生 json 模式属性名称,但如果实现会在未来版本中更改/扩展,我不想更新此代码,它应该继续工作.

编辑:到目前为止我能想到的最好的是:

还有其他想法吗?

0 投票
1 回答
99 浏览

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:

0 投票
0 回答
24 浏览

.net-core - 带有 NJsonSchema C# CodeGeneration 的 CamelCase 属性名称

有人知道配置 NJsonSchema 以使用 CamelCase 属性命名进行代码生成的方法吗?我有一个带有属性名称的 JSON 模式,message_id它导致 C# 属性名称“Message_id”,即“MessageId”应该是一种更像 C# 的方式。

使用像 '[JsonProperty("message_id"]' 这样的属性,指定不同名称之间的连接是没有问题的。

0 投票
1 回答
27 浏览

c# - 将 json 模式转换为没有属性的 ac# poco

我正在寻找将一个简单的 json 模式转换为 ac# poco。

我正在使用 NJsonSchema 来做到这一点,它做得很好。但是,我希望创建没有任何在序列化时会失败的属性的 POCO。我想填充 C# 对象,然后让 json 模式验证运行。如果需要某些东西或 null 让 poco 填充,然后允许我对其进行序列化,然后可能会在针对模式的 json 验证上失败。

NJsonSchema 在很多方面都很完美,但是我找不到在生成时取消属性 JsonProperty 的方法。

这是我的 NJsonSchema 代码生成代码。

这是生成的类

0 投票
2 回答
40 浏览

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),我尝试实现同样的事情,但由于某种原因,它在我的情况下失败了。

我错过了什么?

0 投票
0 回答
9 浏览

c# - 重用具有多个验证限制的单一引用模式

我有一个架构,我想将其用于 2 个属性:

现在我希望 prop2 应该针对公共模式中提到的 requiredproperties 进行验证,但 prop1 不应该。由于此 ref 架构是共享的,因此我无法将所需的属性保留在 commonschema 中。有没有一种方法可以在 ref 架构上添加这些验证,而无需直接将它们添加到其中?

另请注意,我在 c# 中动态创建此模式,因此不确定如何在模式中对条件要求条件进行编程。有没有办法在 commonschema 中满足此条件,如果其父模式 title=="prop2" 那么应用必填字段验证