.net 项目使用 JSON Schema
.net 项目使用 JSON Schema
最近公司要做配置项的改造,要把appsettings.json的内容放到数据库,经过分析还是用json的方式存储最为方便,项目改动性最小,这就牵扯到一个问题,怎么验证json的格式:
最终考虑两种方案供大家参考:
第一,建立对应的实体类,反序列化之后再序列化成json字符串,这样可以在结构上保证对应json串的格式不出错,但是不好验证内容的正确性。一定程度上保证了数据的正确性,再加上使用这个功能的人员也都是相关的技术人员,有一定的可行性。代码上的快,人一定很帅,上代码:
var jsonStr = "{\"Name\":\"你好\",\"PhoneNumber\":\"170*****889\",\"Zone\":\"Commerial\"}";
var build = JsonConvert.DeserializeObject(jsonStr);
jsonStr = JsonConvert.SerializeObject(build);
第二,JSON Schema的方式来验证json格式,那简直就是为你而生为你而来,什么是json schema呢?咱们先通过下面好好了解一下:
>(百度百科) 什么是json Schema:
jsonschema是描述你的JSON数据格式;JSON模式(应用程序/模式+ JSON)有多种用途,其中之一就是实例验证。验证过程可以是交互式或非交互式的。
话不多说,先上代码,让我们一睹她的面容:
{
"type": "object",
"properties": {
"Name": {
"type": "string",
"maxLength": 100
},
"PhoneNumber": {
"type": "string",
"format": "phone"
},
"Zone": {
"type": "string",
"enum": [
"Residential",
"Commercial",
"Industrial"
]
}
},
"required": [
"Name",
"PhoneNumber",
"Zone"
]
}
这不也是json吗,还搞得这么神秘?
对,就是json,是描述json格式的json。
那我们就开始对这个json分解,慢慢欣赏.
type,properties,required都是干嘛的呢?
先留给你们几分钟自己了解下:
https://www.cnblogs.com/dreamyu/p/9317721.html
看到这里,想必大家对json Schema不再陌生了吧。是不是更想了解她,得到她呢?下面我就给大家介绍一个工具来生成她,程序员做梦都想的一个事情就是new一个女朋友,这就来了:
JSchemaGenerator generator = new JSchemaGenerator();
JSchema schema = generator.Generate(typeof(类名));
这里以Newtonsoft.Json.Schema为例子:
类名举个例子为:Building
public class Building {
[Required]
[MaxLength(100)]
public string Name { get; set; }
[Required]
[Phone]
public string PhoneNumber { get; set; }
[Required]
[EnumDataType(typeof(BuildingZone))]
public string Zone { get; set; }
}
DataTypeAttribute 类 请参考:
https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.dataannotations.datatypeattribute?view=net-6.0
生成的schema为:
{
"type": "object",
"properties": {
"Name": {
"type": "string",
"maxLength": 100
},
"PhoneNumber": {
"type": "string",
"format": "phone"
},
"Zone": {
"type": "string",
"enum": [
"Residential",
"Commercial",
"Industrial"
]
}
},
"required": [
"Name",
"PhoneNumber",
"Zone"
]
}
这是这么简单就得到了我们的女主角schema, 让我们的schema生出我们对应的json吧。还需要一个工具:
https://form.lljj.me/index.html#/demo?ui=VueElementForm&type=Simple

拿到我们的json数据:
{
"Name": "张三",
"PhoneNumber": "18856881888",
"Zone": "Residential"
}
怎么验证到底是不是亲生的呢?肯定要后台验证了:
var person = JObject.Parse(json);
bool valid = person.IsValid(schema);
valid 就是化验结果了,此时拿到结果的我确有点犹豫了。。。
.net 项目使用 JSON Schema的更多相关文章
- 利用JSON Schema校验JSON数据格式
最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...
- Map传参优雅检验,试试json schema validator
背景 笔者目前所在团队的代码年代已久,早年规范缺失导致现在维护成本激增,举一个深恶痛疾的例子就是方法参数使用Map"一撸到底",说多了都是泪,我常常在团队内自嘲"咱硬是把 ...
- 使用JSON Schema来验证接口数据
最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式. 如果之前看我写的<使用joi来验证数据模型 ...
- 技术那么多,你想看看JSON Schema的测试吗?
目录 1. 什么是JSON Schema? 2. 如何定义一个JSON Schema 3. 如何测试JSON Schema a) 使用JSON Schema validator GUI b) 在Jav ...
- Json.Net使用JSON Schema验证JSON格式【实例】
给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...
- Json.Net使用JSON Schema验证JSON格式
Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...
- JSON Schema 校验实例
JSON Schema 简介 JSON Schema is a vocabulary that allows you to annotate and validate JSON documents. ...
- 详解vue-cli脚手架项目-package.json
该随笔收藏自: 详解vue-cli脚手架项目-package.json package.json是npm的配置文件,里面设定了脚本以及项目依赖的库. npm run dev 这样的命令就写在packa ...
- Json Schema的使用
直接上案例: 在Web Api通讯中,客户端发送json数据,服务端反序列化json(json与某个类形成对应关系),在某些情况下,需要校验其上传的json是否合法. 服务端是使用Json.net(n ...
随机推荐
- Java 中的 TreeMap 是采用什么树实现的?
Java 中的 TreeMap 是使用红黑树实现的.
- 如果我不输入<!DOCTYPE HTML>,HTML 5能工作吗?
No,浏览器将无法识别HTML文件,并且HTML 5标签将无法正常工作.
- 7_线性控制器设计(Linear Controller Design)
开环系统中 状态方程,其中A的特征值将决定这个系统的表现(稳定性或者收敛速度:特征值小于0时系统稳定) 如果开环系统特征值大于0时(即系统不稳定时): 可以引入输入量U时(U是关于状态变量X的函数), ...
- carsim2016事件如何设置
#carsim2016事件设置# 完成以下功能:车速低于60km/h时,加速,设置节气门开度为0.8,制动主斜体样式缸压力设为0:车速高于120km/h时,制动,设置节气门开度为0,制动主缸压力设置为 ...
- 使用 Vuex + Vue.js 构建单页应用
鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...
- React中Ref 的使用 React-踩坑记_05
React中Ref 的使用 React v16.6.3 在典型的React数据流中,props是父组件与其子组件交互的唯一方式.要修改子项,请使用new props 重新呈现它.但是,在某些情况下,需 ...
- EMS查看单个邮箱的已用空间
Exchange查询单个邮箱用户使用状态. 查看用户"wsj"的邮箱使用状态 键入以下命令: Get-MailboxStatistics wsj | FL DiplayName,T ...
- 百度离线人脸识别sdk的使用
1.1下载sdk运行 百度离线人脸识别sdk的使用 1.2配置环境 添加至项目,可以拖动复制或者以类库形式添加face-resource此文件夹 放到根目录上一层 激活文件与所有dll引用放到根目录嫌 ...
- JavaSSM-总结
Spring框架技术 SSM(Spring+SpringMVC+Mybatis)阶段的学习,也算是成功出了Java新手村. 前面我们已经学习过Mybatis了. 从这里开始,很多的概念理解起来就稍微有 ...
- 《java基础——对象的拷贝》
java基础--对象的拷贝 一.浅拷贝: 规则: 1. 浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化. 2. 浅拷贝相当于两个对象共用一套实例. 格式: 类名 对象 ...