<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          .NET 項(xiàng)目使用 JSON Schema

          共 2816字,需瀏覽 6分鐘

           ·

          2022-05-14 23:29

          ????最近公司要做配置項(xiàng)的改造,要把a(bǔ)ppsettings.json的內(nèi)容放到數(shù)據(jù)庫(kù),經(jīng)過(guò)分析還是用json的方式存儲(chǔ)最為方便,項(xiàng)目改動(dòng)性最小,這就牽扯到一個(gè)問(wèn)題,怎么驗(yàn)證json的格式:

          最終考慮兩種方案供大家參考:

          第一,建立對(duì)應(yīng)的實(shí)體類(lèi),反序列化之后再序列化成json字符串,這樣可以在結(jié)構(gòu)上保證對(duì)應(yīng)json串的格式不出錯(cuò),但是不好驗(yàn)證內(nèi)容的正確性。一定程度上保證了數(shù)據(jù)的正確性,再加上使用這個(gè)功能的人員也都是相關(guān)的技術(shù)人員,有一定的可行性。代碼上的快,人一定很帥,上代碼:

           var jsonStr = "{\"Name\":\"你好\",\"PhoneNumber\":\"170*****889\",\"Zone\":\"Commerial\"}"; var build = JsonConvert.DeserializeObject(jsonStr);  jsonStr = JsonConvert.SerializeObject(build);

          第二,JSON Schema的方式來(lái)驗(yàn)證json格式,那簡(jiǎn)直就是為你而生為你而來(lái),什么是json schema呢?咱們先通過(guò)下面好好了解一下:

          >(百度百科) 什么是json Schema:
          jsonschema是描述你的JSON數(shù)據(jù)格式;JSON模式(應(yīng)用程序/模式+ JSON)有多種用途,其中之一就是實(shí)例驗(yàn)證。驗(yàn)證過(guò)程可以是交互式或非交互式的。

          話(huà)不多說(shuō),先上代碼,讓我們一睹她的面容:


          { "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嗎,還搞得這么神秘?
          對(duì),就是json,是描述json格式的json。
          那我們就開(kāi)始對(duì)這個(gè)json分解,慢慢欣賞.
          type,properties,required都是干嘛的呢?
          先留給你們幾分鐘自己了解下:
          https://www.cnblogs.com/dreamyu/p/9317721.html

          看到這里,想必大家對(duì)json Schema不再陌生了吧。是不是更想了解她,得到她呢?下面我就給大家介紹一個(gè)工具來(lái)生成她,程序員做夢(mèng)都想的一個(gè)事情就是new一個(gè)女朋友,這就來(lái)了:

           JSchemaGenerator generator = new JSchemaGenerator(); JSchema schema = generator.Generate(typeof(類(lèi)名));

          這里以Newtonsoft.Json.Schema為例子:

          類(lèi)名舉個(gè)例子為: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 類(lèi) 請(qǐng)參考:
          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" ]}

          這是這么簡(jiǎn)單就得到了我們的女主角schema, 讓我們的schema生出我們對(duì)應(yīng)的json吧。還需要一個(gè)工具:

          https://form.lljj.me/index.html#/demo?ui=VueElementForm&type=Simple

          73ce572863143db9c4bd52e406559de7.webp

          拿到我們的json數(shù)據(jù):


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

          怎么驗(yàn)證到底是不是親生的呢?肯定要后臺(tái)驗(yàn)證了:

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


          MIPSASM復(fù)制全屏


          valid 就是化驗(yàn)結(jié)果了,此時(shí)拿到結(jié)果的我確有點(diǎn)猶豫了。。。

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


          版權(quán)聲明:本文來(lái)源于網(wǎng)友收集或網(wǎng)友提供,僅供學(xué)習(xí)交流之用,如果有侵權(quán),請(qǐng)轉(zhuǎn)告版主或者留言,本公眾號(hào)立即刪除。



          0aea3da6c12e39ac70ad5e6addd457b0.webp支持小薇

          騰訊云福利?

          ?爆款2核2G云服務(wù)器首年50元,2G2核5M云服務(wù)器259元/3年

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

          關(guān)注:DotNet開(kāi)發(fā)跳槽

          ?????????????????????????????????????????????????????????????

          ??0671864736ecf672d74895b6a61c15b8.webp覺(jué)得不錯(cuò),請(qǐng)點(diǎn)個(gè)在看4c031c932fc92c329dceb25602c73903.webp

          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  5月婷婷6月丁香 | 毛片免费观看视频 | 爆操阿姨| 性爱视频精品综合 | 91操美女视频 |