JSON.NET: ¿Por qué usar JToken alguna vez?
(1)
Como seguimiento a mi pregunta aquí: JSON.NET: Obtenga JObject de JProperty Value ...
Leí enlaces y digerí los comentarios y consejos anteriores. Ahora me pregunto: ¿hay una buena razón por la cual no hay una forma "directa" (es decir, fácil) de convertir el valor de un objeto JProperty en un JObject? Parece mucho trabajo llegar a un JToken y luego tener que construir sentencias if, etc. Esto no es para quejarse del trabajo extra; más bien, es admitir que todavía creo que no entiendo el verdadero propósito de JToken. En un momento, todos los paquetes de FedEx se enrutaron primero a Memphis: parece que todos los objetos pueden / deben ir a JToken primero y luego ser parcelados al tipo de objeto objetivo real. ¿Es esa una forma de pensarlo?
En otras palabras, ¿alguna vez hay una buena razón para usar JToken, o es que tantas otras funciones devuelven un JToken y luego tienes que lidiar con eso? El manual de JSON.NET ofrece formas de transmitir JToken a otros tipos ( http://www.newtonsoft.com/json/help/html/Operators_T_Newtonsoft_Json_Linq_JToken.htm ) pero no menciona ir de JToken a JObject ...
Encuentro que JObject suele ser lo que quiero tener para trabajar con JSON y asignar de JSON a mis clases .NET y viceversa, así como realizar una serie de otras operaciones. Todavía me pregunto cuál es la razón de peso para usar un objeto JToken.
Desde el estándar , JSON está construido a partir de los siguientes cinco tipos de token:
- objeto : un conjunto desordenado de pares de nombre / valor.
- array : una colección ordenada de valores.
-
valor
: una
cadena
entre comillas dobles, o un
número
, o
true
ofalse
onull
, o un objeto o una matriz. Estas estructuras pueden estar anidadas. - cuerda
- número
JToken
es una clase base abstracta que representa cualquiera de estos tokens posibles.
Si tiene algo de JSON y no sabe de antemano qué podría estar dentro, puede analizarlo con
JToken.Parse()
y obtener un resultado siempre que el JSON sea válido.
JObject.Parse()
y
JArray.Parse()
se lanzarán si el token JSON raíz no es del tipo esperado.
Y no hay
JValue.Parse()
para analizar una cadena JSON que sabes que representa un valor "atómico", que requiere el uso de
JToken.Parse()
en tal caso.