Page 1 of 1

Wie kann sichergestellt werden, dass NJsonSchema nur erforderliche Felder enthält?

Posted: 18 Jan 2025, 21:07
by Guest
Ich verwende NJsonSchema v2.6 zum Generieren des JSON-Schemas für die folgende Klasse:

Code: Select all

[DataContract(Name = "Message", Namespace = "")]
public class AMessageModel
{
[DataMember]
internal Guid MessageId { get; set; }

internal DateTime MessageDate { get; set; }
}

[DataContract(Name = "Message", Namespace = "")]
public class AddUserMessage : AMessageModel
{
[DataMember]
public string AccountName { get; set; }

[DataMember]
public string FistName { get; set; }

[Range(2, 5)]
[DataMember]
public string LastName { get; set; }

[DataMember]
public string Email { get; set; }

[DataMember]
public string Password { get; set; }
}
Das generierte JSON-Schema:

Code: Select all

        {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"typeName": "AddFitnessHubAccountMessage",
"additionalProperties": false,
"properties": {
"AccountName": {
"type": [
"null",
"string"
]
},
"FistName": {
"type": [
"null",
"string"
]
},
"LastName": {
"type": [
"null",
"string"
]
},
"Email": {
"type": [
"null",
"string"
]
},
"Password": {
"type": [
"null",
"string"
]
}
},
"allOf": [
{
"type": "object",
"typeName": "AMessageModel",
"additionalProperties": false,
"properties": {
"MessageId": {
"type": "string",
"format": "guid"
},
"MessageDate": {
"type": "string",
"format": "date-time"
}
}
}
]
}
Auch wenn die MessageDate-Eigenschaft nicht als DataMember markiert ist, ist sie immer im Schema enthalten. Außerdem enthält das generierte Schema zwei Schemapfade, obwohl es nur einen enthalten sollte. Es scheint, dass der Parser die Eigenschaften nicht reduziert.

UPDATE

Dies behebt das Problem bei der Erstellung mehrerer Schemapfade

Code: Select all

new JsonSchemaGeneratorSettings
{
FlattenInheritanceHierarchy = true
}
GitHub-Problem: https://github.com/NJsonSchema/NJsonSchema/issues/53