在.net項目使用JSONSchema示例詳解
最近公司要做配置項的改造,要把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.jb51.net/article/247934.htm
看到這裡,想必大傢對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使用JSONSchema的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- python庫JsonSchema驗證JSON數據結構使用詳解
- java程序中protobuf的基本用法示例
- JSON Schema概念及使用場景
- PHP使用Swagger生成好看的API文檔
- C#中對象與JSON字符串互相轉換的三種方式