ホームページ  >  記事  >  ウェブフロントエンド  >  JSON文字列とエンティティ間の厳密な検証コードについて

JSON文字列とエンティティ間の厳密な検証コードについて

高洛峰
高洛峰オリジナル
2016-12-07 10:56:061271ブラウズ

プロジェクトでは、受信した 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 までご連絡ください。