私は、定義セクションをより良く生成し、整理したいと思っています。これは、定義の深さを増やすことができないことを意味しますが、ツリーは、定義セクションに独自のエントリを持ち、$ refで参照される必要があります。これは、各定義に対してプリミティブ型(文字列、ブール値など)であるか、別のカスタムクラスの別の定義エントリへの$ refであるプロパティのリストしか持たないことを意味します。 C#でクラスが最初に定義された方法に近い、深さ1の定義としてこれを見ることもできます。簡単な例を介してこれを説明するためNewtonsoft.Json.Schema.Generation:人間が読める「定義」セクション
:
JSchemaGenerator schemaGenerator = new JSchemaGenerator();
schemaGenerator = new JSchemaGenerator()
{
DefaultRequired = Newtonsoft.Json.Required.DisallowNull,
SchemaIdGenerationHandling = SchemaIdGenerationHandling.TypeName,
SchemaLocationHandling = SchemaLocationHandling.Definitions,
SchemaReferenceHandling = SchemaReferenceHandling.Objects,
};
JSchema schema = schemaGenerator.Generate(typeof(Setting));
がレンダリング:
{
"id": "Setting",
"definitions": {
"SubSetting": {
"id": "SubSetting",
"type": "object",
"properties": {
"SubSubSetting": {
"id": "SubSubSetting",
"type": "object",
"properties": {
"String": {
"type": "string"
}
}
}
}
},
"SubSubSetting": {
"$ref": "SubSubSetting"
}
},
"type": "object",
"properties": {
"SubSetting": {
"$ref": "SubSetting"
},
"SubSubSetting": {
"$ref": "SubSubSetting"
}
}
}
したがって、SubSubSetting
定義はインラインSubSetting
定義が配置され、後我々はインライン定義への参照としてSubSubSetting
を定義しています。これは複雑なデータ構造にとっては避けたいものですが、実際にはわかりにくくなり、データ注釈とJsonProperty
に基づいて、生き生きとして自動生成されたドキュメントの一部としてスキーマを提供したいと考えています。
JSchemaGenerator
を使用してこれを行うにはどうすればよいですか?
多分私はこれをしてはいけませんが、2番目の非常に短い質問です:それらは$ref
は構文的に正しいですか?彼らは"#/definitions/SubSetting"
のように見えるべきではありませんか?