.NET 项目使用 JSON Schema

llovebo

共 2816字,需浏览 6分钟

 ·

2022-05-14 23:29

    最近公司要做配置项的改造,要把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

73ce572863143db9c4bd52e406559de7.webp

拿到我们的json数据:


{ "Name": "张三", "PhoneNumber": "18856881888", "Zone": "Residential"}

怎么验证到底是不是亲生的呢?肯定要后台验证了:

  var person = JObject.Parse(json);  bool valid = person.IsValid(schema);


MIPSASM复制全屏


valid 就是化验结果了,此时拿到结果的我确有点犹豫了。。。

出处:https://www.cnblogs.com/mulaba/p/16264557.html


版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。



0aea3da6c12e39ac70ad5e6addd457b0.webp支持小薇

腾讯云福利 

 爆款2核2G云服务器首年50元,2G2核5M云服务器259元/3年

链接:https://curl.qcloud.com/1VVs7OBH

关注:DotNet开发跳槽

                                                             

  0671864736ecf672d74895b6a61c15b8.webp觉得不错,请点个在看4c031c932fc92c329dceb25602c73903.webp

浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报