<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

          共 2531字,需瀏覽 6分鐘

           ·

          2022-05-16 17:47

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

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

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

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

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

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

          話不多說,先上代碼,讓我們一睹她的面容:

          {
          "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生出我們對應(yīng)的json吧。還需要一個工具:

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

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

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

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

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

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


          瀏覽 62
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  尤物网在线观看 | 久久99精品蜜桃无码 | 免费看片av在线 免费毛片a在线看 | 国产夜间福利视频 | 青青草原视频精品在线免费观看 |