So teilen Sie die Big JSON -Schema -Datei in mehrere Dateien auf, die Sie mit Newtonsoft json.net verwenden könnenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So teilen Sie die Big JSON -Schema -Datei in mehrere Dateien auf, die Sie mit Newtonsoft json.net verwenden können

Post by Anonymous »

Ich muss eine JSON-Schema-Datei für einige Anforderungs-/Antwortstrukturen eines API-Project schreiben, damit ich sie mit "JSON.NET-Schema" verwenden kann. Da einige der Objekte in Mutiple -Anforderungen und/oder Antwortstrukturen verwendet werden, habe ich beschlossen, sie in separate Dateien zu setzen und wiederzuverwenden. Meine Idee ist es, die JSON-File (en) für die Definition von Objekttypen in einem Unterordner zu speichern (zum Beispiel "Def" sagen). Die resultierende Struktur von Dateien kann:

\ [Ordner mit JSON-Schema-Dateien] < /p>

-Schema-request1.json

-Schema-Response1.json

\ def

Object1.json

Object2.json

...
< /blockquote>
< /blockquote>
Hier ist ein kleines Beispiel für eine Antwortstruktur (List von "Customer" -Obweiten): Hier ist ein kleines Beispiel für eine Antwortstruktur (eine Antwortstruktur (List von "Objekts".[
{
"CustomerID": "1",
"Name": "Smith",
"FirstName": "Joe"
},
{
"CustomerID": "2",
"Name": "Miller",
"FirstName": "Maggie"
}
]
< /code>
Ich habe die folgenden JSON -Schema -Dateien geschrieben:
customer.json
{
"$id": [What should I set here?]
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"Customer": {
"type": "object",
"properties": {
"CustomerID": {
"type": "string"
},
"Name": {
"type": "string"
},
"FirstName": {
"type": "string"
},
},
"required": [
"CustomerID",
"Name",
"FirstName"
]
}
}
}
< /code>
CustomerListResponse.json
{
"$id": [What should I set here?]
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": [
{
"$ref": [How to reference json schema file in subfolder 'def' here?]
}
]
}
< /code>
Ich habe festgestellt, dass die Verweise auf die Definition für das Kundenobjekt von Schlüsselwörtern "$ id" und "$ ref" durchgeführt werden muss, aber ich finde keine Lösung, die mit "JSON.NET -Schema" funktioniert.public static bool ValidateSchema(string json, FileInfo schemaFile, out List errors)
{
IList validationErrors = new List();
errors = new List();

JSchema schema = null;
if (schemaFile.Exists)
{
try
{
using (StreamReader file = File.OpenText(schemaFile.FullName))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
JSchemaUrlResolver resolver = new JSchemaUrlResolver();
JSchemaReaderSettings settings = new JSchemaReaderSettings { Resolver = resolver, BaseUri = new Uri(schemaFile.DirectoryName ?? Environment.CurrentDirectory) };
schema = JSchema.Load(reader, settings);
}
}
}
catch (Exception ex)
{
validationErrors.Add($"Error while loading schema file '{schemaFile.FullName}'.");
}
}
else
{
validationErrors.Add($"Schema file '{schemaFile.FullName}' not found.");
}
if (schema != null)
{
try
{
JToken token = JToken.Parse(json);
token.Validate(schema, (sender, e) =>
{
StringBuilder errorBuilder = new StringBuilder();
errorBuilder.Append(e.ValidationError.Message);
errorBuilder.Append($" ({e.ValidationError.LineNumber}/{e.ValidationError.LinePosition})");
validationErrors.Add(errorBuilder.ToString());
});
}
catch (Exception ex)
{
validationErrors.Add($"Error while parsing JSON string '{json}'.");
}
}

errors.AddRange(validationErrors);
return !validationErrors.Any();
}
< /code>
Alle Dokumentationen, die ich gefunden habe, sagen mir, dass ich (zum Beispiel) < /p>
festlegen sollte"$id": "http://some.domain/def/Customer"
< /code>
In der JSON-Datei für das Kundenobjekt und < /p>
"$id": "http://some.domain/CustomerListResponse"
"items": [
{
"$ref": "http://some.domain/def/Customer"
}
]
< /code>
In der JSON -Schema -Datei für die Antwort.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post