Estoy tratando de deserializar la llamada Graph API de un amigo de Facebook en una lista de objetos. El objeto JSON se ve así:
{"data":[{"id":"518523721","name":"ftyft"},
{"id":"527032438","name":"ftyftyf"},
{"id":"527572047","name":"ftgft"},
{"id":"531141884","name":"ftftft"},
{"id":"532652067","name"...
List<EFacebook> facebooks = new JavaScriptSerializer().Deserialize<List<EFacebook>>(result);
No funciona porque el objeto primitivo no es válido. ¿Cómo puedo deserializar esto?
Dictionary<string,string>
, consulte: stackoverflow.com/questions/7699972/…Respuestas:
Necesita crear una estructura como esta:
Entonces deberías poder hacer:
Los nombres de mis clases son solo un ejemplo. Debes usar nombres propios.
Agregar una prueba de muestra:
Produce:
fuente
A veces prefiero los objetos dinámicos:
fuente
Una excelente manera de generar automáticamente estas clases para usted es copiar su salida JSON y lanzarla aquí:
http://json2csharp.com/
Le proporcionará un punto de partida para retocar sus clases para la deserialización.
fuente
Muy fácilmente podemos analizar el contenido JSON con la ayuda del diccionario y JavaScriptSerializer. Aquí está el código de muestra mediante el cual analizo el contenido JSON de un archivo ashx.
fuente
Newtonsoft.JSON
Es una buena solución para este tipo de situaciones. TambiénNewtonsof.JSON
es más rápido que otros, comoJavaScriptSerializer
,DataContractJsonSerializer
.En esta muestra, puede hacer lo siguiente:
Luego puede enviar jsonData a
JArray
, y puede usar unfor
bucle para obtener datos en cada iteración.Además, quiero agregar algo:
Trabajar con objetos dinámicos y usar Newtonsoft serialize es una buena opción.
fuente
Estoy de acuerdo con Icarus (habría comentado si pudiera), pero en lugar de usar una clase CustomObject , usaría un Diccionario (en caso de que Facebook agregue algo).
o
fuente
public IList<IDictionary<string, dynmaic>> data { get; set; }
Publicación por entregas:
Deserialización :
Para deserializar un objeto dinámico
fuente
Puedes usar estas extensiones
fuente
Aquí hay otro sitio que lo ayudará con todo el código que necesita siempre que tenga disponible una cadena JSON formateada correctamente:
https://app.quicktype.io/
fuente
Si usa .NET Core 3.0, puede usar System.Text.Json (que ahora está incorporado) para deserializar JSON.
El primer paso es crear clases para modelar el JSON. Hay muchas herramientas que pueden ayudar con esto, y algunas de las respuestas aquí las enumeran.
Algunas opciones son http://json2csharp.com , http://app.quicktype.io , o use Visual Studio (menú Editar → Pegado especial → Pegar JSON como clases ).
Entonces puedes deserializar usando:
Si necesita agregar configuraciones, como el
camelCase
manejo, pase la configuración del serializador al deserializador de esta manera:fuente