.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的更多相关文章

  1. 利用JSON Schema校验JSON数据格式

    最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...

  2. Map传参优雅检验,试试json schema validator

    背景 笔者目前所在团队的代码年代已久,早年规范缺失导致现在维护成本激增,举一个深恶痛疾的例子就是方法参数使用Map"一撸到底",说多了都是泪,我常常在团队内自嘲"咱硬是把 ...

  3. 使用JSON Schema来验证接口数据

    最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式. 如果之前看我写的<使用joi来验证数据模型 ...

  4. 技术那么多,你想看看JSON Schema的测试吗?

    目录 1. 什么是JSON Schema? 2. 如何定义一个JSON Schema 3. 如何测试JSON Schema a) 使用JSON Schema validator GUI b) 在Jav ...

  5. Json.Net使用JSON Schema验证JSON格式【实例】

    给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...

  6. Json.Net使用JSON Schema验证JSON格式

    Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...

  7. JSON Schema 校验实例

    JSON Schema 简介 JSON Schema is a vocabulary that allows you to annotate and validate JSON documents. ...

  8. 详解vue-cli脚手架项目-package.json

    该随笔收藏自: 详解vue-cli脚手架项目-package.json package.json是npm的配置文件,里面设定了脚本以及项目依赖的库. npm run dev 这样的命令就写在packa ...

  9. Json Schema的使用

    直接上案例: 在Web Api通讯中,客户端发送json数据,服务端反序列化json(json与某个类形成对应关系),在某些情况下,需要校验其上传的json是否合法. 服务端是使用Json.net(n ...

随机推荐

  1. String s = new String(“xyz”);创建了几个字符串对象?

    两个对象,一个是静态区的"xyz",一个是用 new 创建在堆上的对象.

  2. C语言之基本语句分类(知识点5)

    一.C语言基本语句分类 ①数据定义语句 ②赋值语句 ③函数调用语句 ④表达式语句 ⑤流程控制语句 ⑥复合语句(多个大括号的层次) ⑦空语句 二.注意 ①scanf("%d,%d", ...

  3. SQL函数对应的数据库(案例)

  4. kali Linux 渗透测试 | ettercap图形界面(ARP 欺骗 + DNS欺骗)

    上次我们使用 arpspoof 工具在命令行中完成了 arp 欺骗实验,今天我们用另一种工具 ettercap 工具来实现.ettercap支持图形化操作,对新手非常友好,并且操作非常简单, ette ...

  5. ionic3 教程(五)基本的网络请求

    链接: ionic3教程(一)安装和配置 ionic3教程(二)登录页制作 ionic3教程(三)设置页制作 ionic3教程(四)安卓硬件返回键处理ionic3 教程(五)基本的网络请求 这是最后一 ...

  6. Java将字符串的首字母转换大小写

    //首字母转小写public static String toLowerCaseFirstOne(String s){  if(Character.isLowerCase(s.charAt(0)))  ...

  7. mysql8.0.13本地安装忘记密码解决办法

    之前一直用图形化界面,加上考研期间也没动,竟然把我的数据库密码给忘了,无地自容....... 找了找教程,问题如下: MySQL从低版本向高版本迭代变化的过程,越来越严谨的安全性是其一大特点之一,在版 ...

  8. Spring MVC框架搭建及其详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  9. 【c++】容器的基本操作

    操作\容器 vector list string set stack queue map 插入 push_bcak().insert() push_back() .push_front().inser ...

  10. Water 2.5.8 发布,一站式服务治理平台

    Water(水孕育万物...) Water 为项目开发.服务治理,提供一站式解决方案(可以理解为微服务架构支持套件).基于 Solon 框架开发,并支持完整的 Solon Cloud 规范:已在生产环 ...