我有一个使用JSON消息与客户端通信的Web服务,运行时本身并不知道数据模型,这就是我使用json.net Schema验证来自客户端和服务本身内部的消息的原因,但是它在性能方面造成了大量的开销。
简化的代码仍然包含足够的上下文来理解我在做什么。
public class Template
{
/// <summary>
/// Template known as
/// </summary>
public string Name { get; private set; }
/// <summary>
/// Razor Template
/// </summary>
public string RazorTemplate { get; private set; }
/// <summary>
/// Json Schema definition
/// </summary>
public string Schema { get; private set; }
private JSchema _schema { get; set; }
private JSchema JSchema
{
get
{
if (_schema == null)
_schema = JShema.Parse(Schema);
return _schema;
}
}
private void Validate(JObject obj)
{
// Schema validation Error messages.
IList<string> ValidationError;
// Schema validation.
if (!obj.IsValid(JSchema, out ValidationError))
{
throw new Exception(string.Join(",", ValidationError.ToArray()));
}
}
public string RunTemplate(JObject jobj)
{
// Validate Json Object.
Validate(jobj);
// Code here that access our RazorEngine cache, and add then run Razor Template, or directly run a cached Razor Template...
return "Here we return string generated by RazorEngine to sender.";
}
}
让我说我运行一个简单的&#34; Hello @ Model.Name!&#34;验证json有字符串名称的模板如果我完全注释掉验证,那么这比15-20 次慢。
在Json.Net Schema中使用IsValid是否有更有效的方法?
答案 0 :(得分:1)
确保更新到NuGet上可用的最新版本的Json.NET Schema,在使用旧版本验证某些架构时性能很慢。
还有关于performance best practices的Json.NET Schema网站的文档。