2016-07-05 3 views
1

Я застрял на что-то:JSON.NET: Получение JObject из JProperty Value

Я десериализация файла JSON с помощью JObject.Load:

// get the JSON into an object 
JObject jsonObject = JObject.Load(new 
    JsonTextReader(new StreamReader("mydoc.json"))); 

Fine. Теперь у меня есть population jsonObject.

Теперь я перебирать его свойства, как это:

foreach (JProperty jsonRootProperty in jsonObject.Properties()) 
    {  
    if (jsonRootProperty.Name=="Hotel") 
    { 
     ... !!! I just want a JObject here... 
    } 
    } 

После того, как я нахожу свойство с именем, равным «Отель», я хочу, что ценность имущества как JObject. Уловка состоит в том, что имя свойства гостиницы может быть единственным значением (например, строкой), или это может быть объект JSON или массив JSON.

Как я могу получить значение свойства в переменной JObject, чтобы передать его другой функции, принимающей параметр JObject?

ответ

3

Получите ValueJProperty, который является JToken, и посмотрите на его Type. Это свойство скажет вам, является ли токен объектом, массивом, строкой и т. Д. Если тип токена - это объект, вы можете просто передать его в JObject и передать его функции. Если тип токена - это нечто иное, чем Object, и ваша функция должна иметь JObject, тогда вам нужно будет обернуть значение в JObject, чтобы заставить его работать.

foreach (JProperty jsonRootProperty in jsonObject.Properties()) 
{  
    if (jsonRootProperty.Name=="Hotel") 
    { 
     JToken value = jsonRootProperty.Value; 
     if (value.Type == JTokenType.Object) 
     { 
      FunctionThatAcceptsJObject((JObject)value); 
     } 
     else 
     { 
      FunctionThatAcceptsJObject(new JObject(new JProperty("value", value))); 
     } 
    } 
} 
+0

(Вне темы, но я большой поклонник вас, ваши знания JSON.NET и готовность поделиться им - спасибо за ответ). Выглядит хорошо, но можете ли вы объяснить больше об «переносе значения в JObject»? Я потратил много времени на борьбу с тем, как получить JToken в JObject и, очевидно, я пропустил что-то о том, как JTokens и JObjects связаны друг с другом ... – Jazimov

+0

Первая часть [этого ответа] (http://stackoverflow.com/q/38005957/10263) может помочь вам тогда. В нем рассказывается о том, как связаны JToken, JObject и т. Д. Спасибо за добрые слова. –

+0

Удивительный! Эта ссылка похожа на сокровищницу дополнительной информации. Это, в соответствии с вашим ответом здесь, должно привести меня к правильному пути, чтобы перепрыгнуть эти конечные препятствия JSON.NET! – Jazimov

Смежные вопросы