.net 项目使用 JSON Schema

科技资讯 投稿 36700 0 评论

.net 项目使用 JSON Schema

最终考虑两种方案供大家参考:

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

第二,JSON Schema的方式来验证json格式,那简直就是为你而生为你而来,什么是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.cnblogs.com/dreamyu/p/9317721.html

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

这里以Newtonsoft.Json.Schema为例子:

  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

{
  "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吧。还需要一个工具:

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

怎么验证到底是不是亲生的呢?肯定要后台验证了:

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

valid 就是化验结果了,此时拿到结果的我确有点犹豫了。

编程笔记 » .net 项目使用 JSON Schema

赞同 (62) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽