我試圖複製以下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
很高興能有所幫助 –