C# JToken获取特定值

C# JToken获取特定值,c#,json,C#,Json,我有以下JToken输出。我如何从TenantID检索此处的“值”,在本例中,该值应为1 {[ { "value": 1, "metadata": { "userType": 0, "flags": 8, "type": { "type": "INT4", "name": "Int", "id": 56 }, "colName": "TenantID" } } ]} 这是我当前的代码: JToken valu

我有以下JToken输出。我如何从TenantID检索此处的“值”,在本例中,该值应为1

{[
 {
  "value": 1,
  "metadata": {
   "userType": 0,
   "flags": 8,
   "type": {
    "type": "INT4",
    "name": "Int",
    "id": 56
   },
   "colName": "TenantID"
  }
 }
]}
这是我当前的代码:

        JToken value;
        if (usr.Profile.TryGetValue("tenantid", out value))
        {
            JObject inner = value["value"].Value<JObject>(); //not working with null error
            User.TenantID = (string)value;
        }
        User.obj = usr.Profile;

我需要检查tenantID是否确实存在,然后获取值,否则返回null或0。

您应该能够执行以下操作:

JObject jObject = JObject.Parse(...);
JToken value = jObject.SelectToken("value");
解析
对象
,然后应该公开内部内容,您可以利用
SelectToken
方法来查找特定值

要构建一点,您可能需要执行以下操作:

public static JToken FindToken<T>(string key, T value)
{
     string serialized = NewtonsoftJsonSerializer.Instance.Serialize(value);
     var jObject = JObject.Parse(serialized);
     var jToken = jObject.SelectToken(key);

     if(jToken != null)
          return jToken;

     return null;
}
公共静态JToken FindToken(字符串键,T值)
{
string serialized=NewtonsoftJsonSerializer.Instance.Serialize(值);
var jObject=jObject.Parse(序列化);
var jToken=jObject.SelectToken(键);
如果(jToken!=null)
返回jToken;
返回null;
}

我仍然无法了解您的JSON的总体情况,不过请看一下。这可能对你有帮助

var str = @"{
    ""x"": [{
            ""value"": 1,
            ""metadata"": {
                ""userType"": 0,
                ""flags"": 8,
                ""type"": {
                    ""type"":""INT4"",
                    ""name"":""Int"",
                    ""id"": 56
                },
                ""colName"":""TenantID""
            }
        }
    ]
}";

var parentJObject = JObject.Parse(str);
var xJArray = (JArray)parentJObject["x"];

// first item in JArray which is the object of interest
// look for the appropriate index of the JObject of your data
var firstJTokenInxJArray = (JObject)xJArray[0];

Console.WriteLine(firstJTokenInxJArray["value"].ToString());

我得到了我想要的:

JToken value;
        if (usr.Profile.TryGetValue("tenantid", out value))
        {
            User.TenantID = (int)value [0] ["value"];
        }

这是不正确的。JObject必须只有JProperty,不能有direct JArray。请检查。@Ghasan,上面添加了完整的输出。我无法在这里解析Json。JObject-JObject=JObject.Parse(usr.Profile[“tenantid”].ToString());
JToken value;
        if (usr.Profile.TryGetValue("tenantid", out value))
        {
            User.TenantID = (int)value [0] ["value"];
        }