首頁 > web前端 > js教程 > 關於json字串與實體之間的嚴格驗證程式碼

關於json字串與實體之間的嚴格驗證程式碼

高洛峰
發布: 2016-12-07 10:56:06
原創
1329 人瀏覽過

在一個專案中要求嚴格驗證傳入的json字串與定義的 類別匹配,否則不記錄。感覺這個嚴格驗證找了很多資料才找到,可能用的人比較少,特摘出來給大家分析,直接上代碼了:

using Newtonsoft.Json;

先引用Newtonsoft.Json.Schema

主主函數呼叫

private static void Main(string[] args)
{
string Json = @"{
'Email':'58',
'Active':true,
'CreateDate':'2015-12-11 9:24:33'
}";
try
{
/*这里是通过指定的实体创建一个规则来验证传入的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);
}
/*
这段代码的也是设置捕获异常的,只是大范围的验证,如果匹配不上则给予默认值。上面的是严格判断
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;
}
登入後複製

   

實體類別

using System;
public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreateDate { get; set; }
}
登入後複製

   


相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
mysql儲存json錯誤
來自於 1970-01-01 08:00:00
0
0
0
php - Json中存在的反斜線
來自於 1970-01-01 08:00:00
0
0
0
取得:傳輸JSON數據
來自於 1970-01-01 08:00:00
0
0
0
php json 轉換
來自於 1970-01-01 08:00:00
0
0
0
javascript - 關於json數據的展示問題
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板