解包JObject / JArray以检查它是否包含特定字段

时间:2017-02-22 20:11:16

标签: c# .net asp.net-core json.net

我想解包一个JObject以查看它是否包含字段" categories"。 JObject就是这个(在类别中有一些不相关的数据。

{{
  "categories": [
  ]
}}

我的尝试(命名包含类别jobj的JObject):

var x = jobj.Value<double?>("categories");

我得到了这个例外:

{System.InvalidCastException: Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken.
   at Newtonsoft.Json.Linq.Extensions.Convert[T,U](T token)
   at Newtonsoft.Json.Linq.JToken.Value[T](Object key)
   at xxx.JsonSchemaValidator.validateAgainstJsonSchema(JObject list, String schemaFilePath)}

它有点奇怪,它称之为JArray,但我很好,它是一个JArray,只是不明白为什么,因为这是它的使用方式的完整背景:

public static bool validateAgainstJsonSchema(JObject jobj, string schemaFilePath)
{
    JSchema schema = JSchema.Parse(System.IO.File.ReadAllText(schemaFilePath));
    var x = jobj.Value<double?>("categories");

    IList<string> messages;
    bool valid = jobj.IsValid(schema, out messages);
    if (!valid)
        throw new DataMisalignedException("Failed JSON schema validation: " + string.Join("\n", messages));
    return valid;
}

validateAgainstJsonSchema方法的调用如下:

JsonSchemaValidator.validateAgainstJsonSchema(parsedObject as JObject, "./JsonSchema/category-schema.json");

如何访问jobj中的数据以检查它是否包含类别字段?

0 个答案:

没有答案