Json Schema的使用
直接上案例:
在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
Json Schema的使用的更多相关文章
- 使用JSON Schema来验证接口数据
最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式. 如果之前看我写的<使用joi来验证数据模型 ...
- 技术那么多,你想看看JSON Schema的测试吗?
目录 1. 什么是JSON Schema? 2. 如何定义一个JSON Schema 3. 如何测试JSON Schema a) 使用JSON Schema validator GUI b) 在Jav ...
- Json.Net使用JSON Schema验证JSON格式【实例】
给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...
- Json.Net使用JSON Schema验证JSON格式
Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...
- JSON Schema 校验实例
JSON Schema 简介 JSON Schema is a vocabulary that allows you to annotate and validate JSON documents. ...
- Json Schema简介
1. 引言 什么是Json Schema? 以一个例子来说明 假设有一个web api,接受一个json请求,返回某个用户在某个城市关系最近的若干个好友.一个请求的例子如下: { "city ...
- json schema校验
工作中使用到了json schema格式校验的问题,在网上查了些资料,结合自己的理解记录一下. json schema可以对json结果字符串做出一些约束,例如: 1. 值类型是:array, obj ...
- JSON Schema(模式)
JSON Schema指的是数据交换中的一种虚拟的“合同”. JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验. JSON Schema是数据接收方额第一道防线,也是数据发送方 ...
- rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)
rest-assured从2.1.0版本开始支持 Schema 验证,包括JSON Schema validation及Xml Schema validation.我们之前断言响应体都是一个一个字段 ...
随机推荐
- appium-doctor
1. I installed appium-1.5.3.dmg But when I click the stethoscope button the Appium is show error : ...
- 服务器运维 -- windows系统更换System32下文件后 重启无法进入桌面
场景描述: windows系统更换System32下文件后 重启无法进入桌面 情况1,原替换文件有备份 解决建议: 准备好该文件 情况2,原备份文件没有备份 解决建议:从相同版本的服务器上边 ...
- Django --ORM常用的字段和参数 多对多创建形式
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- 接口自动化思路_JAVA
写在开头: 技术渣做接口自动化,大神们请轻喷!多提提优化方案和问题点. 以前做接口测试一直通过postman 和 soapUI来做,Postman 是Chrome的一个插件Case多了不好管理,同时执 ...
- spring载入外部配置文件的方法
<bean class=“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer“> <prop ...
- Python解析HDF文件 分类: Python 2015-06-25 00:16 743人阅读 评论(0) 收藏
前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级 ...
- Python学习的路上,Anaconda送你一双遮天神翼
一.背景 最近在学习python,发现在本地搭建python环境的时候,要是想要同时搭建不同python版本的环境,就比较麻烦,很容易就出现冲突了,很是头疼.然后光明就出现这山重水复疑无路的时候, ...
- Android并发编程 开篇
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- C#7.0--引用返回值和引用局部变量
一.在C#7.0以上版本中,方法的返回值可以通过关键字ref指定为返回变量的引用(而不是值)给调用方,这称为引用返回值(Reference Return Value,或ref returns): 1. ...
- PHP错误解决:Fatal error: Unknown: Failed opening required ...
最近学习PHP,使用XAMPP在Ubuntu下配置完Apache等之后,尝试了一下,但出现如下错误: Warning: Unknown: failed to open stream: 鏉冮檺涓嶅 i ...