在.net项目使用JSONSchema示例详解

 更新时间:2022年05月13日 11:08:51   作者:usday  
这篇文章主要为大家介绍了在.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的资料请关注脚本之家其它相关文章!

相关文章

  • ASP.NET中访问DataGrid中所有控件值的方法

    ASP.NET中访问DataGrid中所有控件值的方法

    这篇文章主要介绍了ASP.NET中访问DataGrid中所有控件值的方法,涉及asp.net控件操作的相关技巧,需要的朋友可以参考下
    2016-04-04
  • ASP.NET MVC异常过滤器用法

    ASP.NET MVC异常过滤器用法

    本文详细讲解了ASP.NET MVC异常过滤器的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • .NET webapi某化妆品直播卡死分析

    .NET webapi某化妆品直播卡死分析

    这篇文章主要为大家介绍了.NET webapi化妆品直播卡死分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • ZKEACMS for .Net Core深度解析

    ZKEACMS for .Net Core深度解析

    ZKEACMS.Core 是基于 .Net Core MVC 开发的开源CMS,这篇文章主要为大家深度解析了ZKEACMS for .Net Core,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出

    在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出

    如果在 Microsoft .NET Framework 2.0 上构建的基于 Microsoft ASP.NET 的应用程序中引发未处理的异常,该应用程序将会意外退出。如果出现这个问题,不会在应用程序日志中记录了解此问题所必需的异常信息。
    2009-11-11
  • ASP.NET程序发布详细过程

    ASP.NET程序发布详细过程

    这篇文章主要为大家介绍了ASP.NET程序发布详细过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • .NET 开源配置组件 AgileConfig的使用简介

    .NET 开源配置组件 AgileConfig的使用简介

    这篇文章主要介绍了.NET 开源配置组件 AgileConfig的使用简介,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下
    2021-05-05
  • 关于Net6 Xunit 集成测试的问题

    关于Net6 Xunit 集成测试的问题

    这篇文章主要介绍了Net6 Xunit 集成测试的相关知识,下面我将Net6下没有使用Startup以及NET6以前版本使用Startup的集成测试(单元测试雷同)做一个梳理,需要的朋友可以参考下
    2022-05-05
  • ASP.NET性能优化之让浏览器缓存动态网页的方法

    ASP.NET性能优化之让浏览器缓存动态网页的方法

    上一篇《ASP.NET性能优化之构建自定义文件缓存》我们通过OutputCache,让请求去访问服务器asp.net的输出缓存,我们扩展了OutputCacheProvider,这相当于是访问服务器上的静态资源。
    2011-09-09
  • Asp.net SignalR 让实时通讯变得如此简单

    Asp.net SignalR 让实时通讯变得如此简单

    下面小编就为大家分享一篇Asp.net SignalR 让实时通讯变得如此简单,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01

最新评论