json.net Schema IsValid slow

本文关键字:slow IsValid Schema net json | 更新日期: 2023-09-27 18:06:34

我有一个使用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.";
    }
}

假设我运行一个简单的"Hello @Model.Name!"模板来验证json是否有字符串名称,这是的15-20倍,如果我完全注释掉验证。

是否有更有效的方法在Json中使用IsValid。网络模式?

json.net Schema IsValid slow

确保更新到最新版本的Json。. NET模式在NuGet上可用,当使用旧版本验证某些模式时性能很慢。

还有关于Json的文档。. NET Schema网站的性能最佳实践。