json.net Schema IsValid很慢

时间:2015-08-06 09:29:10

标签: c# json json.net jsonschema

我有一个使用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是否有更有效的方法?

1 个答案:

答案 0 :(得分:1)

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

还有关于performance best practices的Json.NET Schema网站的文档。