c# json dynamic deserialization json.net

c# - Newtonsoft JSON-Objetos dinámicos



dynamic deserialization (6)

Estoy usando la biblioteca Newtonsoft JSON para realizar una deserialización dinámica en JSON sin procesar entrante y he encontrado algo que simplemente no puedo explicar.

El punto de partida es la siguiente cadena JSON:

{ "task": { "dueDate": "2012-12-03T00:00:00" } }

Nada demasiado complejo allí ...

En el código, entonces estoy haciendo esto:

var dyn = JsonConvert.DeserializeObject<dynamic>(rawJson); DateTime dueDate = dyn.task.dueDate.Value;

Este código ha estado en funcionamiento durante meses y funciona bien, sin embargo, en una versión de prueba reciente vimos el siguiente error:

''Newtonsoft.Json.Linq.JObject'' no contiene una definición para ''tarea''

Stack Trace: en CallSite.Target (Closure, CallSite, Object) en System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0, TRet] (sitio de CallSite, T0 arg0)

Ahora bien, aquí es donde se pone extraño, todo vuelve a funcionar si cambio el código anterior de:

DateTime dueDate = dyn.task.dueDate.Value;

a

DateTime dueDate = dyn["task"]["dueDate"].Value;

Entonces, aunque esto es "fijo", no entiendo por qué esto lo soluciona y cuál podría ser la posible causa. Alguien tiene alguna idea


Definitivamente este es un problema de referencia, solo tuve el mismo problema, resultó que el problema era que había agregado la carpeta de paquetes al proyecto para que pudiera verificarlo en VSS (lo siento, es obligatorio), tan pronto como eliminé el carpeta de paquetes de Visual Studio, comenzó a funcionar bien


En mi caso, resultó que estaba atrapando excepciones de primera oportunidad, así que, aunque esta excepción fue lanzada, de hecho, no estaba impidiendo que mi código se ejecutara.

Sería bueno saber por qué sucede esto para algunos contenidos deserializados por Json.NET, pero no todo el contenido. Por ejemplo, tengo un objeto dinámico que serializo con json.net en una prueba de unidad, luego deserializo el contenido serializado. El contenido serializado se ve idéntico al contenido que, en tiempo de ejecución, provoca que se generen excepciones de encuadernación en tiempo de ejecución.



Tuve el mismo problema con una aplicación que usa Json.NET. El problema se repitió solo en una máquina específica y resultó que la máquina tenía otra versión de Json.NET instalada en GAC. Después de eliminarlo de GAC, la aplicación comenzó a funcionar correctamente.


Tuve este problema por un tiempo, resulta que la DLL utilizada fue compilada para .NET 3.5 que no admitía la dinámica ... Asegúrese de que su DLL esté compilada para .NET 4.5 y superior


Yo tuve el mismo problema.

Json.NET 6.0.4 causa este problema. Debes cambiarlo a Json.Net 6.0.5. Ninguno del proyecto debe hacer referencia a Json.NET 6.0.4.

Vaya a Herramientas -> Gestor de paquetes NuGet -> Gestione paquetes NuGet para la solución ... y compruebe si alguno de los proyectos utiliza Json.NET 6.0.4.