關(guān)于json字符串與實(shí)體之間的嚴(yán)格驗(yàn)證代碼
在一個(gè)項(xiàng)目中要求嚴(yán)格驗(yàn)證傳入的json字符串與定義的 類匹配,否則不記錄。感覺這個(gè)嚴(yán)格驗(yàn)證找了好多資料才找到,可能用的人比較少,特摘出來給大家分析,直接上代碼了:
using Newtonsoft.Json;
首先引用 Newtonsoft.Json.Schema
主函數(shù)調(diào)用
private static void Main(string[] args)
{
string Json = @"{
'Email':'58',
'Active':true,
'CreateDate':'2015-12-11 9:24:33'
}";
try
{
/*這里是通過指定的實(shí)體創(chuàng)建一個(gè)規(guī)則來驗(yàn)證傳入的json是否符合要求*/
JSchemaGenerator generator = new JSchemaGenerator();
JSchema schema = generator.Generate(typeof(Account));
JObject person = JObject.Parse(Json);
IList<string> messages;
bool valid = person.IsValid(schema, out messages);
if (!valid)
{
foreach (string message in messages)
{
Console.WriteLine(message);
}
}
else
{
Console.WriteLine("OK");
}
}
catch (JsonSerializationException ex)
{
Console.WriteLine(ex.Message);
}
/*
這段代碼的也是設(shè)置捕獲異常的,只是大范圍的驗(yàn)證,如果匹配不上則給予默認(rèn)值。上面的是嚴(yán)格判斷
JsonConvert.DeserializeObject<Account>(Json, new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Error,
Error = eventHandler
});
*/
Console.Read();
}
public static void eventHandler(object sender, ErrorEventArgs args)
{
var currentError = args.ErrorContext.Error.Message;
Console.WriteLine(currentError);
args.ErrorContext.Handled = true;
}
實(shí)體類
using System;
public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreateDate { get; set; }
}
以上所述是小編給大家介紹的關(guān)于json字符串與實(shí)體之間的嚴(yán)格驗(yàn)證,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
js中console在一行內(nèi)打印字符串和對象的方法
這篇文章主要介紹了js中console在一行內(nèi)打印字符串和對象的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
JavaScript面向?qū)ο缶幊绦∮螒?--貪吃蛇代碼實(shí)例
這篇文章主要介紹了JavaScript貪吃蛇的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
純js實(shí)現(xiàn)瀑布流布局及ajax動(dòng)態(tài)新增數(shù)據(jù)
這篇文章主要介紹了基于javascript實(shí)現(xiàn)瀑布流布局,及ajax動(dòng)態(tài)新增數(shù)據(jù)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04
十分鐘打造AutoComplete自動(dòng)完成效果代碼
十分鐘打造山寨版谷歌AutoComplete,因?yàn)槭鞘昼姶蛟斐鰜淼?,所以只考慮表面效果,其他全部忽略,絕對的山寨。2009-12-12
TopList標(biāo)簽和JavaScript結(jié)合兩例
TopList標(biāo)簽和JavaScript結(jié)合兩例...2007-08-08
js中調(diào)用微信的掃描二維碼功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了在js中調(diào)用微信的掃描二維碼功能的實(shí)現(xiàn)代碼,本文給大家分享了注意事項(xiàng)及常見問題分析,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
JavaScript+TypeScript實(shí)現(xiàn)并發(fā)隊(duì)列的示例
本文主要介紹了JavaScript+TypeScript實(shí)現(xiàn)并發(fā)隊(duì)列的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08

