C# C-检查JSON结构是否更改
我正在使用Newstonsoft.JSON来处理从互联网上获取的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
{
"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谢谢!我如何检查是否有新增的?谢谢!它会忽略不同的数组元素计数吗?在移除和添加某些内容时都有效?