C# C语言中的JSON模式验证程序#

C# C语言中的JSON模式验证程序#,c#,asp.net,asp.net-mvc,asp.net-core,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Mvc 4,我有一个用于Json验证的类 public class RootObject { [JsonProperty("Key", Required = Required.Always)] public string Key { get; set; } [JsonProperty("Value", Required = Required.Always)] public string Value { get; set; }

我有一个用于Json验证的类

public class RootObject
{
    [JsonProperty("Key", Required = Required.Always)]
    public string Key { get; set; }

    [JsonProperty("Value", Required = Required.Always)]
    public string Value { get; set; }

    [JsonProperty("Type", Required = Required.Always)]
    public string Type { get; set; }
}
我的要求是根据我的
AttributeValue
验证JSON(格式如下)

我的代码是

if(objProductInfo.Products.AttributeValue!=null)
{
var生成器=新的JSchemaGenerator();
JSchema schema=generator.Generate(typeof(List));
JArray jsonArray=JArray.Parse(objProductInfo.Products.AttributeValue);
bool-isValidSchema=jsonArray.IsValid(模式);
如果(!isValidSchema)
{
objProductInfo.Products.AttributeValue=null;
}
}
这里验证了大多数情况,但问题是如果

 [{"Title":"Color","Key":"Color","Value":"Pink","Type":"Simple"}]
我面临两个问题

  • 这里我们有一个额外的属性是“Title”。这不是一个有效的属性,但是 它显示为有效的

  • 即使忘记在任何键上加双引号,它也会显示为有效 如: [{“Title”:“Color”,“Key”:“Color”,Value:“Pink”,“Type:“Simple”}]

    此处
    Value
    没有引号


  • 默认情况下,架构接受其他属性:

    您可以在架构实例中覆盖此设置:

    publicstaticvoid notallowaditional(JSchema模式)
    {
    schema.AllowAdditionalProperties=false;
    schema.allowaditionalitems=false;
    foreach(schema.Items中的var子级)
    {
    不允许附加财产(儿童);
    }
    }
    
    我已将AllowAdditionalProperty和AllowAdditionalItems设置为false,但它仍然是不固定的。您需要在所有架构树中设置AllowAdditional*,如示例方法
    NotAllowAdditional
    when
    foreach(schema.Items中的var child)
     [{"Title":"Color","Key":"Color","Value":"Pink","Type":"Simple"}]