2015-07-15 6 views
1

У меня есть следующий JToken выход. Как я могу получить «значение» здесь из TenantID, который должен быть 1 в этом случае?JToken получить определенное значение

{[ 
{ 
    "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; 

EDIT - пожалуйста, найти ниже полного выхода JToken:

{[ 
    { 
    "value": 1, 
    "metadata": { 
     "userType": 0, 
     "flags": 8, 
     "type": { 
     "type": "INT4", 
     "name": "Int", 
     "id": 56 
     }, 
     "colName": "TenantID" 
    } 
    } 
    ]} 
    Count: 1 
    First (Newtonsoft.Json.Linq.JContainer): {{ 
    "value": 1, 
    "metadata": { 
    "userType": 0, 
    "flags": 8, 
    "type": { 
     "type": "INT4", 
     "name": "Int", 
     "id": 56 
    }, 
    "colName": "TenantID" 
    } 
}} 
    First (Newtonsoft.Json.Linq.JToken): {{ 
    "value": 1, 
    "metadata": { 
    "userType": 0, 
    "flags": 8, 
    "type": { 
     "type": "INT4", 
     "name": "Int", 
     "id": 56 
    }, 
    "colName": "TenantID" 
    } 
}} 
    HasValues: true 
    IsReadOnly: false 
    Last (Newtonsoft.Json.Linq.JContainer): {{ 
`"value": 1, 
    "metadata": { 
    "userType": 0, 
    "flags": 8, 
    "type": { 
     "type": "INT4", 
     "name": "Int", 
     "id": 56 
    }, 
    "colName": "TenantID" 
    } 
}} 
    Last (Newtonsoft.Json.Linq.JToken): {{ 
    "value": 1, 
    "metadata": { 
    "userType": 0, 
    "flags": 8, 
    "type": { 
     "type": "INT4", 
     "name": "Int", 
     "id": 56 
    }, 
    "colName": "TenantID" 
    } 
}} 
    Next: (null) 
    Parent: {"tenantid": [ 
    { 
    "value": 1, 
    "metadata": { 
     "userType": 0, 
     "flags": 8, 
     "type": { 
     "type": "INT4", 
     "name": "Int", 
     "id": 56 
     }, 
     "colName": "TenantID" 
    } 
    } 
]} 
    Path: "tenantid" 
    Previous: (null) 
    Static members: 
    Non-public members: 
    IEnumerator: 
    Root: {{ 
    "name": "Rx Sidhu", 
    "given_name": "Rx", 
    "family_name": "Sidhu", 
    "locale": "en_US", 
    "emails": [ 
    "[email protected]", 
    "[email protected]", 
    "[email protected]" 
    ], 
    "nickname": "[email protected]", 
    "email": "[email protected]", 
    "picture": "https://apis.live.net/v5.0/f1xxxxxx/picture", 
    "roles": [ 
    "Account Admin", 
    "Admin" 
    ], 
    "tenantid": [ 
    { 
     "value": 1, 
     "metadata": { 
     "userType": 0, 
     "flags": 8, 
     "type": { 
      "type": "INT4", 
      "name": "Int", 
      "id": 56 
     }, 
     "colName": "TenantID" 
     } 
    } 
    ], 
    "email_verified": true, 
    "clientID": "wxxxvC8", 
    "updated_at": "2015-07-15T16:26:30.526Z", 
    "user_id": "windowslive|f1axxxac", 
    "identities": [ 
    { 
     "access_token": "EwBwAq1", 
     "provider": "windowslive", 
     "user_id": "f1aexxxxxac", 
     "connection": "windowslive", 
     "isSocial": true 
    } 
    ], 
    "created_at": "2015-07-01T06:08:21.358Z" 
}} 
    Type: 2 

мне нужно проверить, если tenantID на самом деле существует, и затем получить значение , else return null или 0.

+0

Это JToken неверен. JObject должен иметь только JProperty (s) и не может иметь прямой JArray. Пожалуйста, проверьте. –

+0

@Ghasan, добавлен полный вывод выше –

ответ

0

Я получил то, что искал:

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

Вы должны уметь:

JObject jObject = JObject.Parse(...); 
JToken value = jObject.SelectToken("value"); 

Вы разобрать ваш object, то внутреннее содержание должно подвергаться, в котором вы можете использовать метод 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; 
} 
+0

Я не мог разобрать Json здесь. JObject jObject = JObject.Parse (usr.Profile ["tenantid"]. ToString()); –

0

Я до сих пор не могу получить общую картину вашего 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()); 
Смежные вопросы