Json Schema高性能.net实现库 LateApexEarlySpeed.Json.Schema - 直接从code生成json schema validator
LateApexEarlySpeed.Json.Schema - Json schema validator generation from code
除了用户手动传入标准的json schema来生成validator以外,LateApexEarlySpeed.Json.Schema 实现库也支持直接从用户代码中生成json schema validator.
基本用法
JsonValidator validator = JsonSchemaGenerator.GenerateJsonValidator<TestClass>();
// Now use validator instance as normal
目前为止支持的.net类型
Numeric types: byte, sbyte, short, ushort, int, uint, long, ulong, float, double, decimal.
Boolean, String, Dictionary<string,TAny>, JsonElement, JsonDocument, JsonNode, JsonValue, JsonArray, JsonObject, IEnumerable, Enum, Guid, Uri, DateTimeOffset, DateTime, Nullable value type (Nullable), Custom object.
目前为止支持的validation attributes
LateApexEarlySpeed.Json.Schema实现库支持通过attributes来表示需要的数据限制。查看各attributes的构造函数的参数应该就可以了解其作用:
- EmailAttribute
- ExclusiveMaximumAttribute
- ExclusiveMinimumAttribute
- MaximumAttribute
- MinimumAttribute
- MultipleOfAttribute
- StringEnumAttribute
- IntegerEnumAttribute
- IPv4Attribute
- IPv6Attribute
- LengthRangeAttribute (for both string length and array length)
- MaxLengthAttribute (for both string length and array length)
- MinLengthAttribute (for both string length and array length)
- UniqueItemsAttribute (for array)
- NumberRangeAttribute
- PatternAttribute (for string)
attribute用法:
class TestClass
{
[Maximum(2)]
public int Prop { get; set; }
[LengthRange(10, 20)]
[Pattern("*abc*")]
public string StringProp { get; set; }
}
Nullable
默认情况下,library会认为所有reference类型为可空。如果你希望指定某引用类型的属性不能为空,可以给这个属性加[LateApexEarlySpeed.Json.Schema.Generator.NotNullAttribute]
Required or ignored
默认情况下,当json数据中出现要验证的类属性时,library才会验证这个json中的属性的值。
如果你希望验证某属性必须出现在json数据中,可以给这个属性加[System.Text.Json.Serialization.JsonRequiredAttribute] 或 [System.ComponentModel.DataAnnotations.RequiredAttribute]
如果你希望library忽略对于某个属性的验证,可以给这个属性加[System.Text.Json.Serialization.JsonIgnoreAttribute]
library为这种需求设计为复用.net core默认自带的attribute,是为了尽可能让用户代码有一致体验。
自定义属性名
和System.Text.Json类似, library支持通过attribute和option来提供用户定义的属性名称:
System.Text.Json.Serialization.JsonPropertyNameAttribute:
class CustomNamedPropertyTestClass
{
[JsonPropertyName("NewPropName")]
public int Prop { get; set; }
}
JsonSchemaNamingPolicy options:
JsonSchemaNamingPolicy.CamelCase:
First word starts with a lower case character. Successive words start with an uppercase character. TempCelsius => tempCelsiusJsonSchemaNamingPolicy.KebabCaseLower: Words are separated by hyphens. All characters are lowercase. TempCelsius -> temp-celsius
JsonSchemaNamingPolicy.KebabCaseUpper: Words are separated by hyphens. All characters are uppercase. TempCelsius => TEMP-CELSIUS
JsonSchemaNamingPolicy.SnakeCaseLower: Words are separated by underscores. All characters are lowercase. TempCelsius -> temp_celsius
JsonSchemaNamingPolicy.SnakeCaseUpper: Words are separated by underscores. All characters are uppercase. TempCelsius -> TEMP_CELSIUS
JsonSchemaNamingPolicy.SharedDefault: default option, not change original property name
也可以写自己需要的其他JsonSchemaNamingPolicy:
internal class YourNamingPolicy : JsonSchemaNamingPolicy
{
public override string ConvertName(string name)
{
// convert and return new name.
}
}
用option来自定义property naming policy:
JsonValidator validator = JsonSchemaGenerator.GenerateJsonValidator(type, new JsonSchemaGeneratorOptions { PropertyNamingPolicy = JsonSchemaNamingPolicy.CamelCase }));
Note: 当对某类属性指定了 JsonPropertyNameAttribute,同时又在option中指定了自定义 PropertyNamingPolicy, 则那个属性将使用JsonPropertyNameAttribute,其他属性将使用option.
Issue report
使用中遇到任何问题,或者希望增加的功能,欢迎提到doc repo issue中。
Json Schema高性能.net实现库 LateApexEarlySpeed.Json.Schema - 直接从code生成json schema validator的更多相关文章
- 在SQL 中生成JSON数据
这段时间接手一个数据操作记录的功能,刚拿到手上的时候打算用EF做,后来经过仔细考虑最后还是觉定放弃,最后思考再三决定: 1.以模块为单位分表.列固定(其实可以所有的操作记录都放到同一个表,但是考虑到数 ...
- C#如何生成JSON字符串提交给接口(服务器)
C#如何生成JSON字符串提交给接口(服务器) 第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化 ...
- C#如何生成JSON字符串?(序列化对象)
第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) 第四章:C#如何生成JSON字符串提交给接口 ...
- 生成json格式
html页面 <input type="button" value="重新生成JSON" class="button1" id=&qu ...
- C#.Net 使用 JsonReader/JsonWriter 高性能解析/生成 Json 文档
Swifter.Json 是由本人编写的高性能且多功能的 Json 解析库.下图是 Swifter.Json 与 .Net 平台上的其他 Json 库性能对比: 在 Swifter.Json 近期更新 ...
- 微信小程序:app.json中通过使用扩展库userExtendedLib的方式,引入并使用weui
微信小程序 PK APP: 1.微信有海量⽤⼾,⽽且粘性很⾼,在微信⾥开发产品更容易触达⽤⼾:而推⼴app的成本太⾼. 2.微信小程序也可以跨平台(Android和IOS). 一.project. ...
- 基于async/non-blocking高性能redis组件库BeetleX.Redis
BeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作.除了 ...
- Spring MVC生成JSON数据
以下示例演示如何使用Spring Web MVC框架生成JSON数据格式.首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态表单的Web应用程序: ...
- Hibernate实体生成JSON的问题及解决
1.延迟加载所造成的代理对象无法正常序列化的问题 在实体类上添加注解: @JsonIgnoreProperties({ "hibernateLazyInitializer", &q ...
- ASP.NET用SQL Server中的数据来生成JSON字符串
原文引自: 作者: 缺水的海豚 来源: 博客园 发布时间: 2010-09-21 21:47 阅读: 6136 次 推荐: 0 原文链接 [收藏] 摘要:ExtJs用到的数据内容基本 ...
随机推荐
- 机器学习 | 剖析感知器算法 & Python实现
前言:本系列博客参考于 <机器学习算法导论>和<Python机器学习> 如有侵权,敬请谅解.本书尽量用总结性的语言重述本书内容,避免侵权. 上一篇已经初步介绍了机器学习相关知识 ...
- Codeforce:723A. The New Year: Meeting Friends (水题)
题意:有三个好朋友的家都住在x轴的不同坐标,问新年的时候三个朋友之间问候走的最短距离 max{(a,b,c)} - min{(a,b,c)} 即可 编译器由 VS2017 切换到VScode使用,纪念 ...
- Codeforces Round #717 (Div. 2) 个人题解 A~C (A思維,B位運算,C背包DP)
1516A. Tit for Tat 題意: 給定大小為 \(n\) 的數組和可操作次數 \(k\) , 每次操作都選定兩個數(如果 \(1 \le a_i\) ),使第一個數 - \(1\) ,另一 ...
- S3C2440移植uboot之支持NORFLASH
上节S3C2440移植uboot之支持NAND启动修改了代码支持了NAND启动.这节我们分析uboo使其支持NORFLASH的操作. 目录 1.分析启动错误 2.修改代码 3.在匹配数组中添加我们 ...
- 解决xshell-ssh远程登录,只能通过public key登录导致无法登录的情况
xshell无法通过密码登录的问题如下: 1.登录主机:vi /etc/ssh/sshd_config 2.搜索关键字:PasswordAuthentication 3.将PasswordAuthen ...
- 机器学习-无监督机器学习-密度聚类DBSCAN-19
目录 1. DBSCAN 2. OPTICS 2. MeanShift 1. DBSCAN Density based clustering DBSCAN不要求我们指定cluster簇的数量,避免了异 ...
- js - 使用 scroll属性手撸轮播图 —— 无缝连接,更丝滑
上效果图: 上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- [转帖]美国出口管制第六番 ECCN编码的藏宝图之旅
https://zhuanlan.zhihu.com/p/585040344 哈喽大家好,这里是大话合规 一旦明确物项受EAR管制(大前提) 下一步就是对物项进行编码 @#¥%&* 这篇文章蜗 ...
- [转帖]11GR2数据库审计日志自动清理
审计日志如果把SYSTEM表空间撑爆,也会导致数据库停摆,且11g默认审计是开启状态. 今天就遇到了这样的情况,写了下面脚本来实现自动清理工作,记录操作过程. TRUNCATE TABLE SYS.A ...
- ext4 磁盘扩容
目录 ext4文件系统磁盘扩容 目标 途径 操作步骤 改变前的现状 操作和改变后的状态 ext4文件系统磁盘扩容 一个磁盘有多个分区,分别创建了物理卷.卷组.逻辑卷.通过虚拟机软件对虚拟机的磁盘/de ...