直接上案例:

在Web Api通讯中,客户端发送json数据,服务端反序列化json(json与某个类形成对应关系),在某些情况下,需要校验其上传的json是否合法。

服务端是使用Json.net(newtonsoft.json)进行反序列化。一般我们反序列化json为对象时代码如下:

    class Program{static void Main(string[] args){string str = "{\"Id\":1,\"Name\":\"张三\",\"Age\":20}";Person p = JsonConvert.DeserializeObject<Person>(str);Console.ReadKey();}}internal class Person{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }}

json原型是:

{"Id": 1,"Name": "张三","Age": 20
}

通过调试,结果正确:

然而,下面这个json反序列化也正确

{"Id": 1,"Name": "张三","Age": 20,"Height":170
}

然而这并非我们想要的结果,需要限制不能有额外的key-value (键值对,下同),否则需要反序列化时抛出异常。 为了达到此目的,可以通过JsonSerializerSettings的MissingMemberHandling为MissingMemberHandling.Error:

string str = "{\"Id\":1,\"Name\":\"张三\",\"Age\":20,\"Height\":170}";
JsonSerializerSettings settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Error };
Person p = JsonConvert.DeserializeObject<Person>(str,settings);
Console.ReadKey();

上面是json中有多余key-value的情况下反序列化的让其失败,然后捕获异常进行后续的处理的方法。 但还有一种就是json中缺少某对key-value的情况下序列化的问题, 示例json如下:

{"Id": 1,"Name": "张三"
}

从调试的结果看能正常反序列化,但Age为默认值0。 但在实际的过程中需要校验是否为完整的json(不能缺少某个key-value),如果不是完整的json,则不能反序列化,为了达到这个目地,此处使用newtonsoft.Json.Schema.

首先,安装并添加引用

string str = "{\"Id\":1,\"Name\":\"张三\"}";
JSchema schema = new JSchemaGenerator().Generate(typeof(Person));
JToken token = JToken.Parse(str);
if (token.IsValid(schema))
{JsonSerializerSettings settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Error };Person p = JsonConvert.DeserializeObject<Person>(str, settings);
}
else
{Console.WriteLine("不是完整的json");
}
Console.ReadKey();

参考资料:https://www.newtonsoft.com/jsonschema

更多专业前端知识,请上 【猿2048】www.mk2048.com

Json Schema的使用相关推荐

  1. json schema多种形式_什么是JSON Schema?

    什么是JSON Schema? 如果你曾经使用过XML Schema,RelaxNG或ASN.1,那么你很可能已经知道什么是JSON Schema,并且可以跳过本文的阅读.如果你是头一次听说,或者听过 ...

  2. laravel 验证器怎么验证json对象_Postman使用tv4进行JSON Schema结构验证和断言

    JSON Scheme简介 对于JSON格式的请求数据或者响应数据,在不同的数据和场景下往往会有一部分动态的值及字段.此时我们可以使用JSON Scheme Validator(JSON结构验证)来验 ...

  3. rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)

    rest-assured从2.1.0版本开始支持  Schema 验证,包括JSON Schema validation及Xml Schema validation.我们之前断言响应体都是一个一个字段 ...

  4. json schema多种形式_什么是JSON Schema?及其应用方式......

    如果你曾经使用过XML Schema,RelaxNG或ASN.1,那么你很可能已经知道什么是JSON Schema,并且可以跳过本文的阅读.如果你是头一次听说,或者听过过这个词汇但不了解,那么你来对地 ...

  5. json schema如何约束为小数_如何使用jsonschema进行接口响应断言

    一,JSONSchema的概念 JSONSchema是一种用来描述JSON数据的一种JSON数据结构.JSON Schema也有版本,目前的版本有 Draft 7,Draft 6,Draft 4 和D ...

  6. Json Schema快速入门

    Json Schema快速入门 JSON 模式是一种基于 JSON 格式定义 JSON 数据结构的规范.它被写在 IETF 草案下并于 2011 年到期.JSON 模式: 描述现有数据格式. 干净的人 ...

  7. 3 分钟了解 JSON Schema

    大家好,我不是鱼皮. 幸运又不幸,我是一名程序员,他也是一名程序员. 周末,我在开发网站,他在开发游戏,两个人一起写代码,一起写 Bug 头秃,竟也有了一丝别样的浪漫,好不自在! 今天,他遇到了一个后 ...

  8. JSON Schema

    XML有XML Schema,有Schema的好处就是可以校验文件是否符合规范,在代码提示上也会有许多好处.JSON Schema用于JSON验证. 如果说JSON是盛放数据的袋子,那么JSON Sc ...

  9. 如何快速写出Json Schema,校验Json Schema

    本文首发于微信公众号: [软测小生] 得到一个Json文件,如何快速的去测试呢? 难道是一个个节点的去验证吗?那显然效率太低了. 一般推荐使用Json Schema(一种Json的数据结构定义)去校验 ...

最新文章

  1. ASP实现隐藏下载地址和防盗
  2. 【網址收藏】解决VSCODE“因为在此系统上禁止运行脚本“报错
  3. Spring Security——OAuth 2.0登录——Google,GitHub,Facebook和Okta
  4. html怎么添加图片幻灯,使用CSS3实现的超酷幻灯图片效果
  5. Python脚本模拟登录网页之CSDN篇
  6. GARFIELD@09-20-2004
  7. LINUX上开发ffmpeg程序,查看链接的库
  8. 自主开发的3D打印软件
  9. C4D 通过python导入外部.txt文件数据驱动物体
  10. iconfont 在项目中使用阿里icon
  11. it,GitHub与GitLab的区别
  12. IA-32:Privilege level
  13. Milvus 2.1 版本更新 - 简单可信赖、性能持续提升
  14. 效果最接近《羊了个羊》(卡牌堆叠游戏)的开源代码 微信小程序开源了
  15. Android notes
  16. Python笔记之自定义函数
  17. 农业工程与信息技术是计算机类吗,中国海洋大学农业工程与信息技术概论2020考研复试大纲...
  18. 广州坐标系转换大地2000_珞珈德毅DEU2000坐标转换软件通过2000国家大地坐标系转换软件测评...
  19. 升级到win11家庭版了
  20. 海淘iherb购物最新傻瓜攻略

热门文章

  1. sqoop mysql 安装_Sqoop安装及验证_MySQL
  2. +h eclipse中ctrl_Eclipse 常用的快捷键都有哪些?
  3. 18.8.20 考试总结
  4. VBA操作word生成sql语句
  5. Cocos2d-x3.1FileUtilsTest使用
  6. JavaWeb前端:HTML5 简介
  7. Python全栈开发之3、数据类型set补充、深浅拷贝与函数
  8. [转][HTML]css属性
  9. 模板匹配matchTemplate
  10. 爬虫软件python彻底卸载_Python爬虫实践:如何优雅地删除豆瓣小组的帖子