网站建设的整体流程有哪些,wordpress 生成cookies,网站建设和seo讲师要求,全网营销和网站建设直接上案例#xff1a;
在Web Api通讯中#xff0c;客户端发送json数据#xff0c;服务端反序列化json#xff08;json与某个类形成对应关系#xff09;#xff0c;在某些情况下#xff0c;需要校验其上传的json是否合法。
服务端是使用Json.net(newtonsoft.json)进行…直接上案例
在Web Api通讯中客户端发送json数据服务端反序列化jsonjson与某个类形成对应关系在某些情况下需要校验其上传的json是否合法。
服务端是使用Json.net(newtonsoft.json)进行反序列化。一般我们反序列化json为对象时代码如下 class Program{static void Main(string[] args){string str {\Id\:1,\Name\:\张三\,\Age\:20};Person p JsonConvert.DeserializeObjectPerson(str);Console.ReadKey();}}internal class Person{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }} json原型是 {Id: 1,Name: 张三,Age: 20
} 通过调试结果正确 然而下面这个json反序列化也正确 {Id: 1,Name: 张三,Age: 20,Height:170
} 然而这并非我们想要的结果需要限制不能有额外的key-value 键值对下同否则需要反序列化时抛出异常。 为了达到此目的可以通过JsonSerializerSettings的MissingMemberHandling为MissingMemberHandling.Error string str {\Id\:1,\Name\:\张三\,\Age\:20,\Height\:170};
JsonSerializerSettings settings new JsonSerializerSettings { MissingMemberHandling MissingMemberHandling.Error };
Person p JsonConvert.DeserializeObjectPerson(str,settings);
Console.ReadKey(); 上面是json中有多余key-value的情况下反序列化的让其失败然后捕获异常进行后续的处理的方法。 但还有一种就是json中缺少某对key-value的情况下序列化的问题 示例json如下 {Id: 1,Name: 张三
} 从调试的结果看能正常反序列化但Age为默认值0。 但在实际的过程中需要校验是否为完整的json不能缺少某个key-value如果不是完整的json则不能反序列化为了达到这个目地此处使用newtonsoft.Json.Schema.
首先安装并添加引用 string str {\Id\:1,\Name\:\张三\};
JSchema schema new JSchemaGenerator().Generate(typeof(Person));
JToken token JToken.Parse(str);
if (token.IsValid(schema))
{JsonSerializerSettings settings new JsonSerializerSettings { MissingMemberHandling MissingMemberHandling.Error };Person p JsonConvert.DeserializeObjectPerson(str, settings);
}
else
{Console.WriteLine(不是完整的json);
}
Console.ReadKey(); 参考资料https://www.newtonsoft.com/jsonschema
更多专业前端知识请上
【猿2048】www.mk2048.com