Si è verificato un carattere imprevisto durante l’analisi del valore

Attualmente ho alcuni problemi. Sto usando C # con Json.NET. Il problema è che ottengo sempre:

{“Rilevato carattere imprevisto durante l’analisi del valore: e. Path ”, riga 0, posizione 0.”}

Quindi il modo in cui sto usando Json.NET è il seguente. Ho una class che dovrebbe essere salvata. La class si presenta così:

public class stats { public string time { get; set; } public string value { get; set; } } public class ViewerStatsFormat { public List viewerstats { get; set; } public String version { get; set; } public ViewerStatsFormat(bool chk) { this.viewerstats = new List(); } } 

Un object di questa class sarà riempito e salvato con:

  File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8); 

La parte di salvataggio funziona correttamente e il file esiste ed è pieno. Successivamente il file verrà riletto nella class con:

  try { ViewerStatsFormat current = JsonConvert.DeserializeObject(tmpfile); //otherstuff } catch(Exception ex) { //error loging stuff } 

Ora sulla riga corrente = arriva l’eccezione:

{“Rilevato carattere imprevisto durante l’analisi del valore: e. Path ”, riga 0, posizione 0.”}

Non so perché questo arriva. Il file JSON è il seguente -> Cliccami nel link JSON

Qualcuno ha qualche idea?

Forse non stai passando JSON a DeserializeObject .

Sembra da File.WriteAllText(tmpfile,... quel tipo di tmpfile è una string che contiene il percorso di un file. JsonConvert.DeserializeObject prende il valore JSON, non il percorso del file – quindi fallisce nel tentativo di convertire qualcosa come @"c:\temp\fooo" – che chiaramente non è JSON.

Ho risolto il problema con questi strumenti online:

  1. Per verificare se la struttura Json è OKAY: http://jsonlint.com/
  2. Per generare la mia class Object dalla mia struttura Json: http://json2csharp.com/

Il semplice codice:

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

Ho riscontrato lo stesso errore nella mia soluzione Xamarin.Android.

Ho verificato che il mio JSON era corretto e ho notato che l’errore si verificava solo quando eseguivo l’app come build di rilascio.

È risultato che Linker stava rimuovendo una libreria da Newtonsoft.JSON, causando l’analisi non corretta del JSON.

Ho corretto l’errore aggiungendo Newtonsoft.Json all’impostazione Ignora assiemi nella Configurazione build Android (schermata di seguito)

JSS Parsing Code

 static readonly JsonSerializer _serializer = new JsonSerializer(); static readonly HttpClient _client = new HttpClient(); static async Task GetDataObjectFromAPI(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(json); } } 

Screenshot di Visual Studio per Mac

inserisci la descrizione dell'immagine qui

Screenshot di Visual Studio

inserisci la descrizione dell'immagine qui

Supponiamo che questo sia il tuo peccato

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

se vuoi di nuovo deserializzare la sede, modifica json come sotto

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

quindi prova a deserializzare nella rispettiva class prendendo il valore del luogo

Se si sta utilizzando il download di dati utilizzando url … potrebbe essere necessario utilizzare

var result = client.DownloadData (url);

Questo problema è correlato al Byte Order Mark nel file JSON. Il file JSON non è codificato come dati di codifica UTF8 quando viene salvato. Utilizzando File.ReadAllText(pathFile) questo problema.

Quando stiamo operando su dati Byte e li convertiamo in stringa e quindi passiamo a JsonConvert.DeserializeObject, possiamo usare la codifica UTF32 per ottenere la stringa.

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

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

Ho affrontato un messaggio di errore simile nei moduli Xamarin quando inviavo una richiesta a webApi per ottenere un token,

  • Assicurati che tutte le chiavi ( chiave : valore) (ex.’username ‘,’ password ‘,’ grant_type ‘) nel file Json siano esattamente ciò che il webApi si aspetta, altrimenti triggers questa eccezione.

Eccezione non gestita: Newtonsoft.Json.JsonReaderException: rilevato un carattere imprevisto durante l’analisi del valore: < . Percorso '', linea 0, posizione 0

Quando ho riscontrato un problema simile, l’ho risolto sostituendo &mode=xml per &mode=json nella richiesta.