Caractère inattendu rencontré lors de l'analyse de la valeur
Actuellement, j'ai quelques problèmes. J'utilise C# avec Json.NET. le problème est que je reçois toujours:
{"caractère inattendu rencontré lors de l'analyse de la valeur: E. chemin", ligne 0, position 0."}
Donc la façon dont j'utilise Json.NET est le suivant. J'ai une classe qui devrait être sauvée. La classe ressemble à ceci:
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 objet de cette classe sera rempli et enregistré avec:
File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);
La partie d'enregistrement fonctionne correctement et le fichier existe et est rempli. Après que le fichier sera relu dans la classe avec:
try
{
ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
//otherstuff
}
catch(Exception ex)
{
//error loging stuff
}
Maintenant sur la ligne current= vient l'exception:
{"caractère inattendu rencontré lors de l'analyse de la valeur: E. chemin", ligne 0, position 0."}
Je ne sais pas pourquoi cela vient. Le fichier json est le suivant - > cliquez sur moi im le lien JSON
Quelqu'un a-t-il des idées?
8 réponses
Peut-être que vous ne passez pas JSON à DeserializeObject
.
, Il ressemble à partir de File.WriteAllText(tmpfile,...
ce type de tmpfile
est string
qui contiennent chemin d'accès à un fichier. JsonConvert.DeserializeObject
prend la valeur JSON, pas le chemin du fichier - donc il échoue à essayer de convertir quelque chose comme @"c:\temp\fooo"
- qui n'est clairement pas JSON.
J'ai résolu le problème avec ces outils en ligne:
- pour vérifier si la structure Json est correcte: http://jsonlint.com/
- pour générer ma classe D'objet à partir de ma structure Json: http://json2csharp.com/
Le code simple:
RootObject rootObj= JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(pathFile));
J'ai connu la même erreur dans mon Xamarin.Solution Android.
J'ai vérifié que mon JSON était correct et j'ai remarqué que l'erreur n'est apparue que lorsque j'ai exécuté l'application en tant que version de version.
Il s'est avéré que L'éditeur de liens supprimait une bibliothèque de Newtonsoft.JSON, provoquant l'analyse incorrecte du JSON.
J'ai corrigé l'erreur en ajoutant Newtonsoft.JSON au paramètre Ignorer les assemblys dans la Configuration de construction Android (capture d'écran ci-dessous)
Analyse JSON Code
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);
}
}
Capture D'Écran Visual Studio Mac
Capture D'Écran Visual Studio
Supposons que c'est 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\"}"
}
Ensuite, essayez de désérialiser à la classe respective en prenant la valeur de venue
Si vous utilisez le téléchargement de données à l'aide de l'url...peut avoir besoin d'utiliser
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 encodé en tant que données de codage UTF8 lorsqu'il est enregistré. L'utilisation de File.ReadAllText(pathFile)
résout ce problème.
Lorsque nous opérons sur des données D'octets et que nous les convertissons en chaîne, puis en passant à JsonConvert.DeserializeObject, nous pouvons utiliser l'encodage UTF32 pour obtenir la chaîne.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
J'ai fait face à un message d'erreur similaire dans Xamarin forms lors de l'envoi d'une requête à webApi pour obtenir un jeton,
- assurez-vous que toutes les touches (clé : valeur) (ex.'username',' password',' grant_type') dans le fichier Json sont exactement ce que le webApi attend, sinon il déclenche cette exception.
Exception Non Gérée: Newtonsoft.Json.JsonReaderException: caractère inattendu rencontré lors de l'analyse de la valeur:<.>
Quand j'ai rencontré un problème similaire, je l'ai corrigé en remplaçant &mode=xml
pour &mode=json
dans la demande.