Caractère inattendu rencontré lors de l’parsing de la valeur

Actuellement, j’ai des problèmes. J’utilise C # avec Json.NET. Le problème est que je reçois toujours:

{“Caractère inattendu rencontré lors de l’parsing: e. Path ”, ligne 0, position 0.”}

Donc, la façon dont j’utilise Json.NET est la suivante. J’ai une classe qui devrait être sauvée. La classe ressemble à ceci:

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

Un object de cette classe sera rempli et enregistré avec:

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

La partie sauvegarde fonctionne bien et le fichier existe et est rempli. Après cela, le fichier sera relu dans la classe avec:

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

Maintenant sur le courant = la ligne vient l’exception:

{“Caractère inattendu rencontré lors de l’parsing: e. Path ”, ligne 0, position 0.”}

Je ne sais pas pourquoi cela vient. Le fichier json est le suivant -> Click me im le lien JSON

Quelqu’un a-t-il une idée?

Peut-être ne transmettez-vous pas JSON à DeserializeObject .

On dirait de File.WriteAllText(tmpfile,... ce type de tmpfile est une ssortingng qui contient un chemin vers un fichier. JsonConvert.DeserializeObject prend la valeur JSON, pas le chemin du fichier – donc il échoue en essayant de convertir quelque chose comme @"c:\temp\fooo" – qui n’est clairement pas JSON.

J’ai résolu avec ces outils en ligne:

  1. Pour vérifier si la structure Json est OK: http://jsonlint.com/
  2. Pour générer ma classe Object à partir de ma structure Json: http://json2csharp.com/

Le code simple:

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

J’ai rencontré la même erreur dans ma solution Xamarin.Android.

J’ai vérifié que mon JSON était correct et j’ai remarqué que l’erreur n’apparaissait que lorsque j’ai exécuté l’application en tant que version Release.

Il s’est avéré que l’éditeur de liens supprimait une bibliothèque de Newtonsoft.JSON, entraînant une parsing incorrecte du fichier JSON.

J’ai corrigé l’erreur en ajoutant Newtonsoft.Json au paramètre Ignorer les assemblages dans la configuration de la construction Android (capture d’écran ci-dessous)

Code d’parsing JSON

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

Capture d’écran de Visual Studio Mac

entrer la description de l'image ici

Capture d’écran de Visual Studio

entrer la description de l'image ici

Supposons que ce soit votre json

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

si vous voulez à nouveau désérialiser le lieu, modifiez json comme ci-dessous

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

puis essayez de désérialiser à la classe respective en prenant la valeur du lieu

Si vous utilisez le téléchargement de données en utilisant URL …

var result = client.DownloadData (url);

Ce problème est lié à la marque d’ordre des octets dans le fichier JSON. Le fichier JSON n’est pas codé en tant que données d’encodage UTF8 lorsqu’il est enregistré. L’utilisation de File.ReadAllText(pathFile) ce problème.

Lorsque nous travaillons sur des données Byte et que nous les convertissons en chaîne puis en transmettant à JsonConvert.DeserializeObject, nous pouvons utiliser le codage UTF32 pour obtenir la chaîne.

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

ssortingng jsonSsortingng = Encoding.UTF32.GetSsortingng(docBytes);

J’ai fait face à un message d’erreur similaire dans les formulaires Xamarin lors de l’envoi d’une demande à webApi pour obtenir un jeton,

  • Assurez-vous que toutes les clés ( clé : valeur) (ex. Nom d’utilisateur, mot de passe, type de subvention) dans le fichier Json sont exactement ce que WebApi attend, sinon il déclenche cette exception.

Exception non gérée: Newtonsoft.Json.JsonReaderException: caractère inattendu rencontré lors de l’parsing de la valeur: <. Path '', ligne 0, position 0

Lorsque j’ai rencontré un problème similaire, je l’ai corrigé en remplaçant &mode=xml for &mode=json dans la requête.