Wie kann sichergestellt werden, dass NJsonSchema nur erforderliche Felder enthält?
Posted: 18 Jan 2025, 21:07
Ich verwende NJsonSchema v2.6 zum Generieren des JSON-Schemas für die folgende Klasse:
Das generierte JSON-Schema:
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
GitHub-Problem: https://github.com/NJsonSchema/NJsonSchema/issues/53
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; }
}
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"
}
}
}
]
}
UPDATE
Dies behebt das Problem bei der Erstellung mehrerer Schemapfade
Code: Select all
new JsonSchemaGeneratorSettings
{
FlattenInheritanceHierarchy = true
}