Json Schema的使用
2018-07-22 06:04:33来源:博客园 阅读 ()
直接上案例:
在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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
- ASP.NET使用AjaxPro实现前端跟后台交互详解 2020-03-19
- .net下log4net使用方法详解 2020-03-19
- ASP.NET实现大文件上传功能 2020-03-08
- 使用asp.net+jquery Jsonp的方法 2020-03-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash