>  기사  >  웹 프론트엔드  >  json 문자열과 엔터티 간의 엄격한 확인 코드 정보

json 문자열과 엔터티 간의 엄격한 확인 코드 정보

高洛峰
高洛峰원래의
2016-12-07 10:56:061247검색

프로젝트에서는 수신되는 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으로 문의하세요.