Saltar al contenido
jsonbeautifiers
Español
C# Texto del mensaje transcrito de casos reportados; no se ha ejecutado aquí.

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

Entrada

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.

  1. 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);
  2. 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);
  3. 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