.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 格式。
采用何种验证方式,具体情况视项目需求而定。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?