I am using JSON.NET to generate JSON Schema from c# object class. But I was unable to add any other json schema attributes e.g. maxLength, pattern(regex to validate email), etc
Below is my working code, I can only generate json schema with required attribute. It would be great if anyone can post some code example about how to add those extra attribute for json schema.
Thanks,
my code example
public class Customer
{
[JsonProperty(Required = Required.Always)]
public int CustomerID { get; set; }
[JsonProperty(Required = Required.Always)]
public string FirstName { get; set; }
[JsonProperty(Required = Required.Always)]
public string LastName { get; set; }
[JsonProperty(Required = Required.Always)]
public string Email { get; set; }
[JsonProperty(Required = Required.AllowNull)]
public string Phone { get; set; }
}
to
{
"title" : "Customer",
"type" : "object",
"properties" : {
"CustomerID" : {
"required" : true,
"type" : "integer"
},
"FirstName" : {
"required" : true,
"type" : "string"
},
"LastName" : {
"required" : true,
"type" : "string"
},
"Email" : {
"required" : true,
"type" : "string"
},
"Phone" : {
"required" : true,
"type" : [
"string",
"null"
]
}
}
}
You could use the JavaScriptSerializer class.Like:
Use it like this:
Read also this articles:
You can also try ServiceStack JsonSerializer
One example to use it:
Json.NET Schema now has much improved schema generation support.
You can annotate properties with .NET's Data Annotation attributes to specify information like minimum, maximum, minLength, maxLength and more on a schema.
There is also JSchemaGenerationProvider that lets you take complete control when generating a schema for a type.
More details here: http://www.newtonsoft.com/jsonschema/help/html/GeneratingSchemas.htm
You can create custom JsonConverter something like this. I used reflection to fill out properties.
This conversion can be easily done by 'newtonsoft.json.jsonconvert' class. To uses this class just import newtonsoft.json dll in your project.
James Newton-King is right in his answer, I'll just expand it with a code example so people stumbling onto this page don't need to study the whole documentation.
So you can use the attributes provided with .NET to specify those addidional options, like maximum length of the string or allowed regex pattern. Here are some examples:
The annotations above come from
System.ComponentModel.DataAnnotations
namespace.To make those additional attributes affect resulting json schema, you need to use
JSchemaGenerator
class distributed with Json.NET Schema package. If you use olderJsonSchemaGenerator
, then some upgrade is needed, as it's now deprecated and does not contain new functions like the aforementioned.Here's a sample function that generates Json Schema for the class above:
and you can use it just like this: