Actualmente tengo algunos problemas. Estoy usando C # con Json.NET. El problema es que siempre obtengo:
{"Se encontró un carácter inesperado al analizar el valor: e. Ruta '', línea 0, posición 0."}
Entonces, la forma en que estoy usando Json.NET es la siguiente. Tengo una clase que debería guardarse. La clase se ve así:
public class stats
{
public string time { get; set; }
public string value { get; set; }
}
public class ViewerStatsFormat
{
public List<stats> viewerstats { get; set; }
public String version { get; set; }
public ViewerStatsFormat(bool chk)
{
this.viewerstats = new List<stats>();
}
}
Un objeto de esta clase se completará y guardará con:
File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);
La parte de guardado funciona bien y el archivo existe y está lleno. Después de eso, el archivo se volverá a leer en la clase con:
try
{
ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
//otherstuff
}
catch(Exception ex)
{
//error loging stuff
}
Ahora en la línea current = viene la excepción:
{"Se encontró un carácter inesperado al analizar el valor: e. Ruta '', línea 0, posición 0."}
No sé por qué viene esto. El archivo json es el siguiente -> Haga clic en mí en el enlace JSON
¿Alguien tiene alguna idea?
fuente
Respuestas:
Posiblemente no le está pasando JSON a
DeserializeObject
.Parece que de
File.WriteAllText(tmpfile,...
ese tipotmpfile
esstring
que contiene la ruta a un archivo.JsonConvert.DeserializeObject
toma el valor JSON, no la ruta del archivo, por lo que falla al intentar convertir algo como@"c:\temp\fooo"
, que claramente no es JSON.fuente
Resolví el problema con estas herramientas en línea:
El código simple:
fuente
check if the Json structure
está bien en C #?Experimenté el mismo error en mi solución Xamarin.Android.
Verifiqué que mi JSON era correcto y noté que el error solo aparecía cuando ejecuté la aplicación como una versión de versión.
Resultó que el vinculador estaba eliminando una biblioteca de Newtonsoft.JSON, lo que provocó que el JSON se analizara incorrectamente.
Solucioné el error agregando Newtonsoft.Json a la configuración Ignorar ensamblajes en la Configuración de compilación de Android (captura de pantalla a continuación)
Código de análisis JSON
Captura de pantalla de Visual Studio Mac
Captura de pantalla de Visual Studio
fuente
También encontré este error para una acción de API web (.Net Core 3.0) que se vinculaba a a en
string
lugar de aobject
o aJObject
. El JSON era correcto, pero el enlazador intentó obtener una cadena de la estructura JSON y falló.Entonces, en lugar de:
Tuve que usar el más específico:
fuente
En mi caso, el archivo que contiene la cadena JSON tenía BOM . Una vez que eliminé la lista de materiales, el problema se resolvió.
fuente
Este problema está relacionado con la marca de orden de bytes en el archivo JSON. El archivo JSON no está codificado como datos de codificación UTF8 cuando se guarda. Usando
File.ReadAllText(pathFile)
arreglar este problema.Cuando operamos con datos de Byte y los convertimos en cadenas y luego pasamos a JsonConvert.DeserializeObject, podemos usar la codificación UTF32 para obtener la cadena.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
fuente
Tuve el mismo problema con webapi en el núcleo ASP.NET, en mi caso fue porque mi aplicación necesita autenticación, luego asigna la anotación
[AllowAnonymous]
y funcionó.fuente
Suponga que este es su json
si nuevamente desea deserializar el lugar, modifique json como se muestra a continuación
luego intente deserializar a la clase respectiva tomando el valor del lugar
fuente
En mi escenario, tenía un mensaje ligeramente diferente, donde la línea y la posición no eran cero.
Esta fue la mejor respuesta de Google para el mensaje que cité.
Esto sucedió porque había llamado a un programa desde la línea de comandos de Windows, pasando JSON como parámetro.
Cuando revisé los argumentos en mi programa, se eliminaron todas las comillas dobles. Tienes que reconstituirlos.
Publiqué una solución aquí . Aunque probablemente podría mejorarse con una expresión regular.
fuente
Tuve un error similar y pensé en responder en caso de que alguien tuviera algo similar. Estaba recorriendo un directorio de archivos json y deserializándolos, pero recibía el mismo error.
El problema era que también intentaba capturar archivos ocultos. Asegúrese de que el archivo que está pasando sea un archivo .json. Supongo que también manejará el texto. Espero que esto ayude.
fuente
En mi caso, recibí un error en JsonConvert.PopulateObject () . Mi solicitud devolvía JSON que estaba envuelto en un par adicional de corchetes '[]', lo que hace que mi resultado sea una matriz de un objeto en lugar de solo un objeto. Esto es lo que hice para entrar en estos corchetes (solo para ese tipo de modelo):
fuente
Si está utilizando la descarga de datos mediante url ... es posible que deba utilizar
fuente
Verifique que el modelo que compartió entre el cliente y el servidor sea el mismo. a veces obtienes este error cuando no actualizaste la versión de Api y devuelve un modelo actualizado, pero aún tienes uno antiguo. A veces, lo que serializa / deserializa no es un JSON válido.
fuente
Me enfrenté a un mensaje de error similar en los formularios de Xamarin al enviar una solicitud a webApi para obtener un token,
fuente
Cuando encontré un problema similar, lo solucioné sustituyendo
&mode=xml
por&mode=json
en la solicitud.fuente