.NET 项目使用 JSON Schema

背景:公司多个微服务应用程序的配置文件 appsettings.json 的内容转移到数据库中保存,程序从数据库中获取相关配置信息。

 

方案:

一、建立每一项配置的映射表。主要字段有ID,ITEM_KEY,ITEM_VALUE,ITEM_DESC,CREATETIME等。即将每一个配置项映射为数据库表的一行数据。

二、建立每一个 json 文件的映射表。主要字段有ID,FILE_KEY,FILE_VALUE,FILE_DESC,CREATETIME等。即将每一个配置文件映射为数据库表的一行数据。其中,字段 FILE_VALUE 存放 json 格式的字符串。
这种方案重点在于如何验证 FILE_VALUE 字段内容是否为json格式。

这也有两种方案。
1、建立每一个文件的映射实体类。反序列化之后再序列化成 json 字符串,在结构上保证了字段 FILE_VALUE 内容是 json 格式。

var jsonString = "{\"Name\":\"李四\",\"PhoneNumber\":\"18166667777\",\"Zone\":\"Commerial\"}";
var person = JsonConvert.DeserializeObject(jsonString);
jsonString = JsonConvert.SerializeObject(person);

2、采用 JSON Schema 的方式来验证 json 格式。
2.1、百度一下什么是 json Schema:
json schema 是描述你的JSON数据格式;JSON模式(应用程序/模式+ JSON)有多种用途,其中之一就是实例验证。验证过程可以是交互式或非交互式的。

json 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"
]
}


它也是 json 格式,是描述约束 json 格式的 json。
type,properties,required 从字面上就可以略知一二了。

2.2、想要更详细的深入的了解,请参考:
https://www.cnblogs.com/dreamyu/p/9317721.html

2.3、如何生成我们想要的 json 格式的 json schema 呢?
2.3.1 创建类(appsettings.json 文件映射实体类):

类名为:Person

public class Person {
[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

2.3.2 使用 JSchema 类,得到 schema 。
需安装包 Newtonsoft.Json.Schema 。然后添加两个引用:
using Newtonsoft.Json.Schema;
using Newtonsoft.Json.Schema.Generation;

JSchemaGenerator generator = new JSchemaGenerator();
JSchema schema = generator.Generate(typeof(类名));
//JSchema schema = generator.Generate(typeof(Person));

得到的 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"
]
}


2.3.3 使用一个工具,得到 appsettings.json 文件的 json 内容:

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

得到的 json 内容:
{
"Name": "赵五",
"PhoneNumber": "18188889999",
"Zone": "Residential"
}


2.3.4 后台验证 json 格式,得到验证结果:

var person = JObject.Parse(jsonString);
bool isJson = person.IsValid(schema);
isJson 就是验证结果了。

 

总结:
json schema 全方位定义了 json 格式,包括结构,字段类型,字段长度,字段格式,枚举值,必填字段等等。可以实现验证严格约束 json 格式。
采用何种验证方式,具体情况视项目需求而定。

posted on   贪狼木星  阅读(330)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示