Yoh*_*Yoh 19 c# json.net jsonschema
我正在使用JSON.NET从c#对象类生成JSON Schema.但我无法添加任何其他json架构属性,例如maxLength,pattern(用于验证电子邮件的正则表达式)等
下面是我的工作代码,我只能生成带有必需属性的json模式.如果有人能发布一些关于如何为json模式添加额外属性的代码示例,那将是很棒的.
谢谢,
我的代码示例
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; }
}
Run Code Online (Sandbox Code Playgroud)
至
{
"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"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
Paw*_*wan 11
James Newton-King在他的回答中是正确的,我将使用代码示例扩展它,因此人们绊倒在这个页面上不需要研究整个文档.
因此,您可以使用.NET提供的属性来指定那些addidional选项,例如字符串的最大长度或允许的正则表达式模式.这里有些例子:
public class MyDataModel
{
public enum SampleEnum { EnumPosition1, EnumPosition2, EnumPosition3 }
[JsonProperty(Required = Required.Always)]
[RegularExpression(@"^[0-9]+$")]
public string PatternTest { get; set; }
[JsonProperty(Required = Required.Always)]
[MaxLength(3)]
public string MaxLength3 { get; set; }
[JsonProperty(Required = Required.AllowNull)]
[EnumDataType(typeof(SampleEnum))]
public string EnumProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
上面的注释来自System.ComponentModel.DataAnnotations命名空间.
要使这些附加属性影响生成的json模式,您需要使用JSchemaGenerator随Json.NET Schema包一起分发的类.如果您使用旧版本JsonSchemaGenerator,则需要进行一些升级,因为它现在已弃用,并且不包含上述新功能.
这是一个为上面的类生成Json Schema的示例函数:
/// <summary>
/// Generates JSON schema for a given C# class using Newtonsoft.Json.Schema library.
/// </summary>
/// <param name="myType">class type</param>
/// <returns>a string containing JSON schema for a given class type</returns>
internal static string GenerateSchemaForClass(Type myType)
{
JSchemaGenerator jsonSchemaGenerator = new JSchemaGenerator();
JSchema schema = jsonSchemaGenerator.Generate(myType);
schema.Title = myType.Name;
return schema.ToString();
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
string schema = GenerateSchemaForClass(typeof(MyDataModel));
Run Code Online (Sandbox Code Playgroud)
Jam*_*ing 10
Json.NET Schema现在有了很多改进的模式生成支持.
您可以使用.NET的Data Annotation属性注释属性,以在架构上指定minimum,maximum,minLength,maxLength等信息.
还有JSchemaGenerationProvider,可以在为类型生成模式时完全控制.
更多细节:http://www.newtonsoft.com/jsonschema/help/html/GeneratingSchemas.htm
Adr*_*ian -4
您可以使用 JavaScriptSerializer 类。例如:
namespace ExtensionMethods
{
public static class JSONHelper
{
public static string ToJSON(this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public static string ToJSON(this object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
using ExtensionMethods;
...
List<Person> people = new List<Person>{
new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"},
new Person{ID = 2, FirstName = "Bill", LastName = "Gates"}
};
string jsonString = people.ToJSON();
Run Code Online (Sandbox Code Playgroud)
另请阅读这篇文章:
您还可以尝试 ServiceStack JsonSerializer
使用它的一个例子:
var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13981 次 |
| 最近记录: |