Newtonsoft JSON,检查属性及其值是否存在

Bun*_*Fox 4 c# validation json json.net

我有一个 API,我将 JSON 作为输入,我想检查该 JSON 中是否存在指定的属性及其值。

注意: JSON 不是从代码生成的,而是由用户输入的,因此我无法在序列化时验证 JSON。

考虑以下 JSON:

{
  "id": 1,
  "someProperties": 
  {
    "property1": "abc",
    "property2": ["zzz", "ccc"]
  }
}
Run Code Online (Sandbox Code Playgroud)

在 中somePropertiesproperty1并且property2两者可以同时存在或其中任何一个存在。所以我想检查哪些属性都存在。如果存在,该属性是否具有有效值。

我尝试了以下代码:

dynamic request = JsonConvert.DeserializeObject(JSONRequestData);
var X = request["someProperties"]["property1"];
Run Code Online (Sandbox Code Playgroud)

以下是我必须检查其各自响应的两种情况:

  • 如果JSON 中"property1": "abc"存在,那么我将null进入X
  • 如果我放入property1没有其值的 JSON,它看起来像这样,"property1": ,那么我会得到null.

那么如何区分JSON 中不存在的属性和不存在的属性值

der*_*her 8

dynamic request = JsonConvert.DeserializeObject(JSONRequestData);总是创建一个requestas JObject,因此您可以使用 的方法JObjectJObject本身实现了IDictionary<string, JToken>接口,接口提供了ContainsKey方法。所以你可以简单地做

request.someproperties.ContainsKey("property1");
Run Code Online (Sandbox Code Playgroud)

true仅当someproperties包含名为 的属性时才会返回property1,无论其值如何。request.someproperties.property1即,是否是或任何类型并不重要null,只要它包含在对象中即可。

另请参阅这个小提琴