Al deserializar un objeto a Dictionary
(JsonConvert.DeserializeObject<IDictionary<string,object>>(json)
) los objetos anidados se deserializan a JObject
s. ¿Es posible forzar que los objetos anidados se deserialicen a Dictionary
s?Json.NET: deserializar diccionarios anidados
22
A
Respuesta
32
he encontrado una manera de convertir todos los objetos anidados para Dictionary<string,object>
proporcionando un CustomCreationConverter
aplicación:
class MyConverter : CustomCreationConverter<IDictionary<string, object>>
{
public override IDictionary<string, object> Create(Type objectType)
{
return new Dictionary<string, object>();
}
public override bool CanConvert(Type objectType)
{
// in addition to handling IDictionary<string, object>
// we want to handle the deserialization of dict value
// which is of type object
return objectType == typeof(object) || base.CanConvert(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.StartObject
|| reader.TokenType == JsonToken.Null)
return base.ReadJson(reader, objectType, existingValue, serializer);
// if the next token is not an object
// then fall back on standard deserializer (strings, numbers etc.)
return serializer.Deserialize(reader);
}
}
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText(@"c:\test.json");
var obj = JsonConvert.DeserializeObject<IDictionary<string, object>>(
json, new JsonConverter[] {new MyConverter()});
}
}
Documentación: CustomCreationConverter with Json.NET
-1
Alternativa/actualización:
que necesitaba para deserializar una diccionario de diccionarios de String
sy con Json.NET actual (5.0) No tuve que crear un CustomConverter, I jus t utiliza (en VB.Net):
JsonConvert.DeserializeObject(Of IDictionary(Of String, IDictionary(Of String, String)))(jsonString)
O, en C#:
JsonConvert.DeserializeObject<IDictionary<String, IDictionary<String, String>>(jsonString);
Cuestiones relacionadas
- 1. ¿Cómo deserializar json con diccionarios anidados?
- 2. lista de deserializar objetos usando json.net
- 3. No se puede deserializar json usando json.net
- 4. Json.NET, no se puede deserializar tipo nulable
- 5. Json.net serializar/deserializar los tipos derivados?
- 6. ¿Combinar diccionarios anidados, por claves anidadas?
- 7. ¿Cómo puedo deserializar con TypeNameHandling.Objects en Json.NET Silverlight?
- 8. No se puede deserializar la matriz JSON en tipo - Json.NET
- 9. ¿Cómo deserializar usando JSON.Net a un tipo anónimo?
- 10. Deserializar JSON a un objeto anónimo utilizando JSON.NET
- 11. Xpath como consulta para diccionarios de python anidados
- 12. cómo iterar diccionarios anidados en target-c iphone sdk
- 13. Python: acceso a los valores anidados en los diccionarios
- 14. valor de Acceso dentro de los diccionarios anidados
- 15. Manera elegante de eliminar campos de diccionarios anidados
- 16. Complejos diccionarios anidados que se transforman en objetos en python
- 17. Diccionarios diccionarios
- 18. Json.NET: matrices de serialización/deserialización
- 19. Deserialize json con json.net C#
- 20. JSON.NET Raíz Etiqueta y Deserialización
- 21. DI y JSON.NET
- 22. Deserialización de JSON.NET
- 23. ¿Puede Json.NET deserializar una cadena JSON aplanada con notación de puntos?
- 24. ¿Cómo deserializar el objeto derivado de la clase Exception usando Json.net (C#)?
- 25. json.net rendimiento sobre una cadena json 77kb
- 26. JSON.Net VB deserialize no funciona
- 27. JSON.NET - Deserialización de tipo condicional
- 28. analizando una enumeración en JSON.net
- 29. Diccionarios Concatenación
- 30. Análisis de mapas JSON/diccionarios con Gson?
Esto no es compatible con las estructuras JSON recursivas/desconocidos siendo convertidos correctamente. –
Esto no responde, ya que se refiere específicamente a un nivel fijo de anidación – Javier