Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JSON使不区分大小写_C#_Json.net_Jsonschema - Fatal编程技术网

C# JSON使不区分大小写

C# JSON使不区分大小写,c#,json.net,jsonschema,C#,Json.net,Jsonschema,我正试图从我的C#模型中生成一个模式,到目前为止,以下方面进展顺利: JSchemaGenerator generator = new JSchemaGenerator(); JSchema schema = generator.Generate(typeof(MyClass)); schemachema.AllowAdditionalProperties = false; schemachema.UniqueItems = false; JObject update = JObject.

我正试图从我的C#模型中生成一个模式,到目前为止,以下方面进展顺利:

JSchemaGenerator generator = new JSchemaGenerator();

JSchema schema = generator.Generate(typeof(MyClass));

schemachema.AllowAdditionalProperties = false;
schemachema.UniqueItems = false;

JObject update = JObject.Parse(@"{MYJSON}");

IList<string> messages;
bool IsValid = update.IsValid(clientSchema, out messages);
JSchemaGenerator生成器=新的JSchemaGenerator();
JSchema schema=generator.Generate(typeof(MyClass));
schemachema.AllowAdditionalProperties=false;
schemachema.UniqueItems=false;
JObject update=JObject.Parse(@“{MYJSON}”);
IList消息;
bool IsValid=update.IsValid(clientSchema,out消息);
有一件事我还没有弄清楚,那就是如何使它不区分大小写。它似乎应该自动执行此操作(首先区分大小写,然后不区分大小写),但对我来说不是


关于我遗漏的内容有什么想法吗?

不幸的是,JObject.Parse不允许您更改任何内容

首先,设置模式。JSchema创建了一个内部属性字典

JSchema schema = generator.Generate(typeof(MyClass));    
schema.AllowAdditionalProperties = false;
schema.UniqueItems = false;
我添加了自己的表示,只是为了测试它并执行类反序列化

string MyJson = "{\"PROPERTYONE\":\"Data\", \"PropertyTwo\":10}";
该类故意与此定义不匹配

public class MyClass
{
    public string PropertyOne { get; set; }
    public int PropertyTwo { get; set; }
}
在内部创建读取器,传递字符串,并从定义中获取验证架构读取器:

JsonTextReader reader = new JsonTextReader(new StringReader(MyJson));
JSchemaValidatingReader validatingReader = new JSchemaValidatingReader(reader);
validatingReader.Schema = JSchema.Parse(schema.ToString());
我已经手动创建了与事件挂钩的消息,该事件会触发验证读取器中的每个验证,因此您可以获得验证消息:

IList<string> messages = new List<string>();
validatingReader.ValidationEventHandler += (o, a) => messages.Add(a.Message);
将属性名称与字典进行比较。此词典是一个常规词典,它没有使用属性InvariantCultureInogoreCase,这将使其正确比较(根据您的要求) 唯一的方法是获取GitHub代码并对其进行更新以支持您的功能,直到那时才可能获得您所需要的

JsonSerializer serializer = new JsonSerializer();
MyClass p = serializer.Deserialize<MyClass>(validatingReader);
private bool IsPropertyDefinied(JSchema schema, string propertyName)
{
    if (schema._properties != null && schema._properties.ContainsKey(propertyName))
    {
        return true;
    }
...