我使用NJsonSchema v2.6为以下类生成JSON模式:
[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; }
}
生成的JSON Schema:
{
"$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"
}
}
}
]
}
尽管MessageDate属性未标记为DataMember,但它始终包含在架构中,生成的架构还包括两个架构路径,当它只应包含一个时,似乎解析器不会展平属性。 / p>
更新
这解决了正在创建多个架构路径的问题
new JsonSchemaGeneratorSettings
{
FlattenInheritanceHierarchy = true
}
GitHub问题:https://github.com/NJsonSchema/NJsonSchema/issues/53
答案 0 :(得分:3)
我是图书馆NJsonSchema的作者。
忽略属性
库中有一个错误,现在(v2.7 +)属性忽略如下:
时会忽略属性
- 该属性标有
JsonIgnoreAttribute
属性- 该类具有
醇>DataContractAttribute
属性,且该属性没有DataMemberAttribute
且没有JsonPropertyAttribute
https://github.com/NJsonSchema/NJsonSchema/wiki/JsonSchemaGenerator
展平继承层次结构
正如您已经发现的那样,您可以通过FlattenInheritanceHierarchy
设置来展平继承层次结构......
该库主要用于代码生成,因此通常需要继承。
答案 1 :(得分:1)
由于NJsonSchema依赖于Newtonsoft.Json,您是否尝试过使用Newtonsoft.Json文档?
Conditional Property Serialization
要有条件地序列化属性,请添加返回的方法 boolean与属性同名,然后为方法添加前缀 使用ShouldSerialize命名。该方法的结果确定是否 该属性是序列化的。如果方法返回true则为 属性将被序列化,如果它返回false然后属性 将被跳过。