2016-07-05 2 views
4

В продолжение на мой вопрос здесь: JSON.NET: Obtain JObject from JProperty Value ...JSON.NET: Зачем использовать JToken - когда-либо?

Я читал ссылки и переваренной вышеизложенные замечания и советы. Теперь я задаюсь вопросом: есть ли веская причина, почему нет «прямого» (т. Е. Простого) способа превратить значение объекта JProperty в объект JObject? Кажется, что очень много работы, чтобы добраться до JToken, а затем придется строить, если заявления и т. Д. Это не значит жаловаться на дополнительную работу; скорее, я должен признать, что я все еще думаю, что не понимаю истинной цели JToken. В свое время все пакеты FedEx сначала направлялись в Мемфис: Кажется, что все объекты могут/должны идти в JToken сначала, а затем быть разделены на фактический тип целевого объекта. Это способ думать об этом?

Другими словами, есть ли веская причина использовать JToken - или это просто так, что многие другие функции возвращают JToken, а затем вам нужно только иметь дело с этим? В руководстве JSON.NET приводятся способы использования JToken для других типов (http://www.newtonsoft.com/json/help/html/Operators_T_Newtonsoft_Json_Linq_JToken.htm), но не упоминается о переходе от JToken к JObject ...

Я нахожу, что JObject обычно является тем, что я хочу иметь, чтобы работать с JSON и отобразить из JSON в мои классы .NET и обратно, а также выполнить множество других операций. Я все еще удивляюсь, какая веская причина когда-либо использовать объект JToken?

+1

'JToken' представляет любой возможный токен в файле JSON. Если у вас есть JSON и вы не знаете заранее, что может быть внутри, вы можете проанализировать его с помощью 'JToken.Parse()' и получить результат, пока JSON будет действительным. 'JObject.Parse()', 'JArray.Parse()' и 'JValue.Parse()' будут выдавать, если токен корневого JSON не соответствует ожидаемому типу. – dbc

+0

Чтобы округлить ваше отличное резюме в целом, что такое токен JSON (я еще новичок в JSON)? – Jazimov

+1

Из [стандарта JSON] (http://www.json.org/) (что действительно довольно просто), это будет объект, массив, значение, строка или номер. – dbc

ответ

8

Из standard, JSON построен из следующих пяти типов маркера:

  • объект: неупорядоченный набор пар имя/значение.
  • массив: упорядоченный набор значений. Значение
  • : а строка в двойных кавычках, или номер или true или false или null, или объект, или массив. Эти структуры могут быть вложенными.
  • строка
  • номер.

JToken - это абстрактный базовый класс, который представляет любой из этих возможных токенов. Если у вас есть JSON и вы не знаете заранее, что может быть внутри, вы можете проанализировать его с помощью JToken.Parse() и получить результат, пока JSON действителен. JObject.Parse() и JArray.Parse() будут выдавать, если токен корневого JSON не соответствует ожидаемому типу. И нет JValue.Parse() для анализа строки JSON, которую вы знаете, для обозначения «атомного» значения, требующего использования JToken.Parse() в таком случае.

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