2016-05-23 11 views
1

Ich möchte Definitionen Abschnitt besser generiert und organisiert und für mich würde dies bedeuten, nicht Tiefe Aufbau in Definitionen zu ermöglichen, aber jede Klasse in der Struktur beteiligt Baum sollte einen eigenen Eintrag im Abschnitt Definitionen haben und über $ ref referenziert werden. Dies bedeutet, dass ich für jede Definition nur eine Liste von Eigenschaften haben würde, die entweder von primitiven Typen (String, Boolean, etc.) sein würden oder eine $ ref zu einem anderen Definitionseintrag für eine andere benutzerdefinierte Klasse wären. Sie können dies auch als Definition der Tiefe 1 sehen, ähnlich wie die Klassen ursprünglich in C# definiert wurden.Newtonsoft.Json.Schema.Generation: Mensch lesbaren 'Definitionen' Abschnitt

Um dies über ein triviales Beispiel veranschaulichen:

  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)); 

Renders:

{ 
    "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" 
    } 
    } 
} 

Somit wird SubSubSetting Definition SubSetting Definition inline platziert und später haben wir SubSubSetting als Referenz definiert, die Inline-Definition. Das ist, was ich vermeiden möchte, denn für komplexe Datenstrukturen wird es wirklich undurchsichtig und ich möchte das Schema sogar als Teil einer lebendigen, automatisch generierten Dokumentation auf der Basis von Datenannotationen und JsonProperty bereitstellen.

Wie kann ich dies mit JSchemaGenerator erreichen?

Vielleicht sollte ich das nicht tun, aber als zweite sehr kurze Frage: Sind diese $ref syntaktisch korrekt? Sollten sie nicht wie "#/definitions/SubSetting" aussehen?

Antwort