C# json.net模式无效

C# json.net模式无效,c#,json,json.net,jsonschema,C#,Json,Json.net,Jsonschema,我有一个使用JSON消息与客户机通信的web服务,运行时本身不知道数据模型,这就是为什么我使用JSON.net模式来验证来自客户机和服务本身内部的消息,但是这会在性能方面造成大量开销 简化的代码仍然包含足够的上下文来理解我在做什么 public class Template { /// <summary> /// Template known as /// </summary> public string Name { get; priva

我有一个使用JSON消息与客户机通信的web服务,运行时本身不知道数据模型,这就是为什么我使用JSON.net模式来验证来自客户机和服务本身内部的消息,但是这会在性能方面造成大量开销

简化的代码仍然包含足够的上下文来理解我在做什么

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.";
    }
}
公共类模板
{
/// 
///模板称为
/// 
公共字符串名称{get;private set;}
/// 
///剃刀模板
/// 
公共字符串RazorTemplate{get;private set;}
/// 
///Json模式定义
/// 
公共字符串架构{get;private set;}
私有JSchema_模式{get;set;}
私人JSchema JSchema
{
得到
{
if(_schema==null)
_schema=JShema.Parse(schema);
返回模式;
}
}
私有无效验证(JObject obj)
{
//架构验证错误消息。
IList验证错误;
//模式验证。
如果(!obj.IsValid(JSchema,out ValidationError))
{
抛出新异常(string.Join(“,”,ValidationError.ToArray());
}
}
公共字符串RunTemplate(JObject-jobj)
{
//验证Json对象。
验证(jobj);
//这里的代码访问我们的RazorEngine缓存,添加然后运行Razor模板,或者直接运行缓存的Razor模板。。。
return“在这里,我们将RazorEngine生成的字符串返回给发送方。”;
}
}
假设我运行一个简单的“Hello@Model.Name!”模板来验证json是否具有字符串名称,如果我完全注释掉验证,则速度要慢15-20倍


在Json.Net模式中是否有更有效的方法使用IsValid?

请确保更新到NuGet上可用的Json.Net模式的最新版本,使用旧版本验证某些模式时,性能较慢

在Json.NET模式网站上也有关于的文档