• 关于json字符串与实体之间的严格验证


    在一个项目中要求严格验证传入的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; }  
        }
  • 相关阅读:
    nodejs微服务
    node 操作文件流 fs 同步与异步 流式文件的写入与读取
    node判断文件目录是否存在
    Nodejs 使用 Chrome DevTools 调试 --inspect-brk
    使用ovftool工具实现exsi上主机的导入导出
    redis哨兵
    LVS+Nginx
    nginx的proxy代理缓存
    flanneld启动报错Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
    flanneld启动报错Failed to create SubnetManager: parse first path segment in URL cannot contain colon
  • 原文地址:https://www.cnblogs.com/guaicaiboshi/p/6051116.html
Copyright © 2020-2023  润新知