Saltar al contenido

Confusión de JContainer, JObject, JToken y Linq

Esta es la solución más válida que te podemos aportar, pero primero mírala detenidamente y valora si se puede adaptar a tu trabajo.

Solución:

Realmente no necesitas preocuparte por JContainer en la mayoría de los casos. Está ahí para ayudar a organizar y estructurar LINQ-to-JSON en un código bien factorizado.

los JToken la jerarquía se ve así:

JToken             - abstract base class     
   JContainer      - abstract base class of JTokens that can contain other JTokens
       JArray      - represents a JSON array (contains an ordered list of JTokens)
       JObject     - represents a JSON object (contains a collection of JProperties)
       JProperty   - represents a JSON property (a name/JToken pair inside a JObject)
   JValue          - represents a primitive JSON value (string, number, boolean, null)

Así que ya ves, un JObjectes a JContainercual es a JToken.

Esta es la regla general básica:

  • Si sabe que tiene un objeto (indicado por llaves y en JSON), utilice JObject
  • Si sabes que tienes un array o lista (indicada por corchetes [ and ]), usar JArray
  • Si sabe que tiene un valor primitivo, use JValue
  • Si no sabe qué tipo de token tiene, o desea poder manejar cualquiera de los anteriores de manera general, use JToken. A continuación, puede comprobar su Type property para determinar qué tipo de token es y lanzarlo apropiadamente.

JContainer es una clase base para elementos JSON que tienen elementos secundarios. JObject, JArray, JProperty y JConstructor todos heredan de ella.

Por ejemplo, el siguiente código:

(JObject)JsonConvert.DeserializeObject("[1, 2, 3]")

lanzaría un InvalidCastExceptionpero si lo lanzas a un JContainerestaría bien.

Con respecto a su pregunta original, si sabe que tiene un objeto JSON en el nivel superior, puede usar:

var jsonWork = JObject.Parse(json);
var jsonObject1 = jsonWork["Object1"];

Si para ti ha sido de ayuda nuestro post, sería de mucha ayuda si lo compartieras con otros programadores y nos ayudes a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *