remarks name generate example c# json visual-studio-2013 json.net

c# - name - Carácter inesperado encontrado al analizar el valor



remarks c# (7)

Actualmente tengo algunos problemas. Estoy usando C # con Json.NET. El problema es que siempre recibo:

{"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 debe 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 guardar 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 actual = 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 -> Haz clic en mí en el enlace JSON

¿Alguien tiene alguna idea?


Cuando encontré un problema similar, lo solucioné sustituyendo &mode=xml para &mode=json en la solicitud.


Es posible que no estés pasando JSON a DeserializeObject .

Parece de File.WriteAllText(tmpfile,... ese tipo de tmpfile es una string que contiene 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.


Este problema está relacionado con Byte Order Mark en el archivo JSON. El archivo JSON no está codificado como codificación UTF8 cuando se guardan. El uso de File.ReadAllText(pathFile) soluciona este problema.

Cuando estamos operando en datos Byte y convirtiéndolos en cadenas y luego pasando a JsonConvert.DeserializeObject, podemos usar la codificación UTF32 para obtener la cadena.

byte[] docBytes = File.ReadAllBytes(filePath);

string jsonString = Encoding.UTF32.GetString(docBytes);


Experimenté el mismo error en mi solución Xamarin.Android.

Verifiqué que mi JSON era correcto y noté que el error solo apareció cuando ejecuté la aplicación como versión de versión.

Resultó que el Enlazador estaba eliminando una biblioteca de Newtonsoft.JSON, haciendo que el JSON fuera analizado incorrectamente.

Repare 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

static readonly JsonSerializer _serializer = new JsonSerializer(); static readonly HttpClient _client = new HttpClient(); static async Task<T> GetDataObjectFromAPI<T>(string apiUrl) { using (var stream = await _client.GetStreamAsync(apiUrl).ConfigureAwait(false)) using (var reader = new StreamReader(stream)) using (var json = new JsonTextReader(reader)) { if (json == null) return default(T); return _serializer.Deserialize<T>(json); } }

Captura de pantalla de Visual Studio Mac

Captura de pantalla de Visual Studio


Lo resolví con estas herramientas en línea:

  1. Para verificar si la estructura Json está BIEN: http://jsonlint.com/
  2. Para genarar mi clase Object desde mi estructura Json: http://json2csharp.com/

El código simple:

RootObject rootObj= JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(pathFile));


Si está utilizando la descarga de datos usando url ... puede necesitar usar

var result = client.DownloadData (url);


Supongamos que este es tu json

{ "date":"11/05/2016", "venue": "{/"ID/":12,/"CITY/":Delhi}" }

si quieres de nuevo deserializar el lugar, modifica json como se muestra a continuación

{ "date":"11/05/2016", "venue": "{/"ID/":/"12/",/"CITY/":/"Delhi/"}" }

luego intente deserializar a la clase respectiva tomando el valor del lugar