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)
在 中someProperties,property1并且property2两者可以同时存在或其中任何一个存在。所以我想检查哪些属性都存在。如果存在,该属性是否具有有效值。
我尝试了以下代码:
dynamic request = JsonConvert.DeserializeObject(JSONRequestData);
var X = request["someProperties"]["property1"];
Run Code Online (Sandbox Code Playgroud)
以下是我必须检查其各自响应的两种情况:
"property1": "abc"不存在,那么我将null进入Xproperty1没有其值的 JSON,它看起来像这样,"property1": ,那么我会得到null.那么如何区分JSON 中不存在的属性和不存在的属性值?
dynamic request = JsonConvert.DeserializeObject(JSONRequestData);总是创建一个requestas JObject,因此您可以使用 的方法JObject。JObject本身实现了IDictionary<string, JToken>接口,接口提供了ContainsKey方法。所以你可以简单地做
request.someproperties.ContainsKey("property1");
Run Code Online (Sandbox Code Playgroud)
true仅当someproperties包含名为 的属性时才会返回property1,无论其值如何。request.someproperties.property1即,是否是或任何类型并不重要null,只要它包含在对象中即可。
另请参阅这个小提琴