json.net

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 o false o null , 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.