C# C-检查JSON结构是否更改

C# C-检查JSON结构是否更改,c#,json,json.net,C#,Json,Json.net,我正在使用Newstonsoft.JSON来处理从互联网上获取的JSON文件,但这些文件的结构经常会发生变化,我不想每天都检查它是否有变化。如何检查结构是否已更改?我不关心数组中的值或元素数,但我关心子元素的结构。我怎样才能做到这一点 { "abc": true, // I want to check if there is "abc", but I don't care if it is true or false "def": 4, // I want to check if there i

我正在使用Newstonsoft.JSON来处理从互联网上获取的JSON文件,但这些文件的结构经常会发生变化,我不想每天都检查它是否有变化。如何检查结构是否已更改?我不关心数组中的值或元素数,但我关心子元素的结构。我怎样才能做到这一点

{
"abc": true, // I want to check if there is "abc", but I don't care if it is true or false
"def": 4, // I want to check if there is "def", but I don't care which value it has
[
    {
    "ghi": false // I want to check if all the children has ghi,but I don't check the value
    }
] // I don't care if there is 1 or 1000 elements in array

}

您可以创建JSON模式,并使用JSON.Net根据该模式验证JSON文件,如下所示:

JsonSchema schema = JsonSchema.Parse(jsonSchema);
JObject obj = JObject.Parse(jsonString);
bool valid = obj.IsValid(schema);
JsonConvert.DeserializeObject<Person>(jsonString, new JsonSerializerSettings
{
    MissingMemberHandling = MissingMemberHandling.Error
});
更多信息可以找到和

或者,如果您只想检查接收的JSON是否将所有属性作为对应的DTO类,则可以使用[JSONPropertyRequested=Required.Always]属性标记所有属性:

class Person
{
   [JsonProperty(Required = Required.Always)]
   public string Name { get; set; }
   [JsonProperty(Required = Required.Always)]
   public int Age { get; set; }
} 
如果要检测JSON与DTO相比是否有一些额外的属性,可以执行以下操作:

JsonSchema schema = JsonSchema.Parse(jsonSchema);
JObject obj = JObject.Parse(jsonString);
bool valid = obj.IsValid(schema);
JsonConvert.DeserializeObject<Person>(jsonString, new JsonSerializerSettings
{
    MissingMemberHandling = MissingMemberHandling.Error
});

[JsonPropertyRequired=Required.Always]和反序列化将返回null(如果不存在)。@IanMercer谢谢!我如何检查是否有新增的?谢谢!它会忽略不同的数组元素计数吗?在移除和添加某些内容时都有效?