我试图复制以下Json Schema
例如,通过使用Newtonsoft.Json.Schema
定义代码架构:如何定义一个JSON模式包含了定义,在代码
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"address": {
"type": "object",
"properties": {
"street_address": { "type": "string" },
"city": { "type": "string" },
"state": { "type": "string" }
},
"required": ["street_address", "city", "state"]
}
},
"type": "object",
"properties": {
"billing_address": { "$ref": "#/definitions/address" },
"shipping_address": { "$ref": "#/definitions/address" }
}
,因为我已经得到了这是接近至今。 (例子是在F#,但或许也同样在C#)。
代码:
open Newtonsoft.Json.Schema
open Newtonsoft.Json.Linq
let makeSchema =
let addressSchema = JSchema()
addressSchema.Properties.Add("street_address", JSchema(Type = Nullable(JSchemaType.String)))
addressSchema.Properties.Add("city", JSchema(Type = Nullable(JSchemaType.String)))
addressSchema.Properties.Add("state", JSchema(Type = Nullable(JSchemaType.String)))
addressSchema.Required.Add "street_address"
addressSchema.Required.Add "city"
addressSchema.Required.Add "state"
let schema = JSchema()
schema.Properties.Add("billing_address", addressSchema)
schema.Properties.Add("shipping_address", addressSchema)
schema
输出:
{
"properties": {
"billing_address": {
"properties": {
"street_address": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"street_address",
"city",
"state"
]
},
"shipping_address": {
"$ref": "#/properties/billing_address"
}
}
}
正如你所看到的,只有两个地址的一个定义使用对另一个模式的引用,并且地址模式在“属性”而不是“定义”中。在“定义”中定义模式并在其他地方引用它有什么窍门?
谢谢这么多!我们已经接近这一点,但op_Implicit是推动我们超越界限的原因。我已经记录了一个问题:https://github.com/JamesNK/Newtonsoft.Json.Schema/issues/60。当我测试这个时,将会标记为答案。 (我确定它没问题; - ) – Kit
在我们的“真实世界”代码中使用了这种方法,它的工作就像一个魅力。再次感谢! – Kit
很高兴能有所帮助 –