Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
A JsonConvert.DeserializeObject le pasaron algo que no empieza por un valor JSON. Línea 0 posición 0 significa que falló en el primerísimo carácter. El carácter que aparece en el mensaje te dice qué tienes en realidad.
Pega tu JSON y ve exactamente dónde se rompe
Nada de lo que pegues sale de tu navegador. La lista de permitidos de connect-src convierte eso en una garantía del navegador, no en una promesa. Compruébalo tú mismo
Qué lo provoca realmente
Ordenados por la frecuencia con la que cada uno acaba siendo la respuesta.
-
01 Has pasado una ruta de archivo en vez del contenido del archivo
DeserializeObject espera una cadena JSON, no un nombre de archivo. Pasar una ruta hace que el parser lea C:\... como el documento y falle en la letra C o en una barra. Es un error muy común y el mensaje no da ninguna pista al respecto.
Falla
var data = JsonConvert.DeserializeObject<Model>(@"C:\data\input.json");Funciona
var json = File.ReadAllText(@"C:\data\input.json"); var data = JsonConvert.DeserializeObject<Model>(json); -
02 La respuesta es HTML
Una página de error, una redirección al login o un error de IIS. El carácter del mensaje será <. Lee el cuerpo como cadena e inspecciónalo antes de deserializar.
Falla
var data = JsonConvert.DeserializeObject<Model>(await res.Content.ReadAsStringAsync());Funciona
var body = await res.Content.ReadAsStringAsync(); if (!res.IsSuccessStatusCode || !body.TrimStart().StartsWith("{")) throw new InvalidOperationException($"{(int)res.StatusCode}: {body[..Math.Min(300, body.Length)]}"); var data = JsonConvert.DeserializeObject<Model>(body); -
03 Una marca de orden de bytes al principio de la cadena
Leer un archivo sin dejar que el detector de codificación elimine el BOM deja un U+FEFF delante del JSON.
El mismo error en otros entornos
El problema de fondo es idéntico; solo cambia la redacción. Si un compañero reporta alguno de estos, está mirando exactamente lo mismo que tú.
| C# (System.Text.Json) | '<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0. |
|---|---|
| JavaScript (V8) | Unexpected token '<', "<!DOCTYPE "... is not valid JSON |
Preguntas frecuentes
- ¿Debería migrar a System.Text.Json?
- Es la opción incorporada desde .NET Core 3.0 en adelante y es más rápida, pero también es más estricta: nada de cadenas con comillas simples, ni comas finales, ni comentarios salvo que los habilites explícitamente. El código que dependía de la permisividad de Newtonsoft necesitará que se arregle el productor.
Arréglalo ahora
Pega el payload en la herramienta de arriba, o ve directamente a la creada para este trabajo.
Comprobar el payload