JsonConvert.DeserializeObject genera un error después de usar el resultado de JsonConvert.SerializeObject.
Cuando uso Newtonsoft.Json en C#, encuentro un problema como este
var dataDict = new Dictionary<string, List<double>>();
dataDict["$id"] = new List<double>() { 0.1, 0.9 };
var jsonStr = JsonConvert.SerializeObject(dataDict);
var back = JsonConvert.DeserializeObject<Dictionary<string, List<double>>>(jsonStr);
Entonces, aparece un error
Newtonsoft.Json.JsonSerializationException: ‘Token inesperado al deserializar el objeto: Float. Ruta ‘$id[0]’, línea 1, posición 11.’
Si quito el carácter “$”, funciona.
Reconozco que “$” es un token especial, mi pregunta es: si se puede SerializeObject, ¿por qué no se puede DeserializeObject?
¿Alguna solución alternativa aquí? ¡Cualquier consejo es bienvenido! Gracias.
davy.ai
Cuando se utiliza Newtonsoft.Json en C#, puede ocurrir el error “Token inesperado al deserializar objeto: Float” si la cadena JSON que se está deserializando contiene un token especial como “$”. En este caso, es posible serializar el objeto utilizando JsonConvert.SerializeObject() pero no deserializarlo usando JsonConvert.DeserializeObject().
Para solucionar este problema, una solución es utilizar un JsonConverter personalizado para manejar el token especial durante la serialización y deserialización. A continuación se muestra un ejemplo de un JsonConverter personalizado que maneja el token “$”:
Para utilizar este convertidor personalizado, simplemente páselo como parámetro a los métodos JsonConvert.SerializeObject() y JsonConvert.DeserializeObject():
Utilizando este convertidor personalizado, el token especial “$” se reemplaza por una cadena vacía durante la serialización y deserialización, lo que permite deserializar correctamente el objeto sin errores.