recorrer newtonsoft deserialize c# asp.net json

newtonsoft - C#- Deserializar JSON a objeto anónimo



recorrer json en c# (5)

En C #, he serializado con éxito un objeto anónimo en JSON mediante el uso de un código como este ...

var obj = new { Amount = 108, Message = "Hello" }; JavaScriptSerializer serializer = new JavaScriptSerializer(); String output = serializer.Serialize(obj);

Sin embargo, lo que me gustaría poder hacer más tarde es deserializar la cadena JSON en un objeto anónimo. Algo como esto...

var obj2 = serializer.Deserialize(output, object);

Pero el método serializer.Deserialize () requiere un segundo parámetro que es el tipo de objeto al que se deserializará.

Intenté esto ...

var obj2 = serializer.Deserialize(output, obj.GetType());

Pero esto produce un error:

No se ha definido ningún constructor sin parámetros para el tipo de ''<> f__AnonymousType0`2 [[System.Int32, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.String, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]] ''.

No estoy seguro de lo que significa este error.


¿qué hay de la dinámica, la forma más rápida que veo es esta:

dynamic myObject = JsonConvert.DeserializeObject<dynamic>(output); decimal Amount = Convert.ToDecimal(myObject.Amount); string Message = myObject.Message;

Nota: Necesitará la referencia de Newtonsoft.json.dll


En cuanto al uso del método DeserializeObject , no requiere un tipo específico. Esto también resolvió una pregunta similar de SO . El método se deserializa a un Dictionary<string, object> contiene pares de nombre / valor.

Actualización : para aclarar el error que se obtiene al hacer esto:

var obj2 = serializer.Deserialize(output, obj.GetType());

Dado el tipo de obj , Deserialize intentará crear una nueva instancia del tipo utilizando un constructor predeterminado. Los tipos anónimos en C # no tienen un constructor público sin parámetros y, por lo tanto, la operación falla.


Esto también se puede hacer usando el JavaScriptSerializer incorporado, de la siguiente manera:

object result = new JavaScriptSerializer().DeserializeObject(JSONData);

Esto devolverá una instancia de object [], con pares Key-Value.


Recientemente he estado usando la increíble JsonFX y he llegado a apreciar lo que hace. Puede usar Nuget Package Manager para instalarlo directamente dentro de Visual Studio.

El código va así.

class DataTransferObject { int Amount { get; set; } string Message { get; set; } }

Como puede ver, incluso puede especificar la plantilla para Tipo Anónimo.


JSON.Net es una biblioteca poderosa para trabajar con JSON en .Net

Hay un método DeserializeAnonymousType que puede tocar.

Actualización : Json.Net ahora se incluye con ASP.Net, sin embargo, mi último favorito que uso es JsonFX . Tiene un gran soporte de linq también, échale un vistazo.

Actualización 2 : He pasado de JsonFX, y actualmente uso ServiceStack.Text , ¡es rápido!