Actuellement, j'ai quelques problèmes. J'utilise C # avec Json.NET. Le problème est que j'obtiens 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 la suivante. J'ai une classe qui devrait être sauvegardé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 cela, 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 courante = 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 dans le lien JSON
Quelqu'un a-t-il une idée?
Réponses:
Vous ne transmettez peut-être pas JSON à
DeserializeObject
.Il ressemble à de
File.WriteAllText(tmpfile,...
ce type detmpfile
est -string
contenant 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.la source
J'ai résolu le problème avec ces outils en ligne:
Le code simple:
la source
check if the Json structure
est OKAY en C #?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'exécutais l'application en tant que version Release.
Il s'est avéré que l'éditeur de liens supprimait une bibliothèque de Newtonsoft.JSON, provoquant une 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)
Code d'analyse JSON
Capture d'écran de Visual Studio Mac
Capture d'écran de Visual Studio
la source
J'ai également rencontré cette erreur pour une action d'API Web (.Net Core 3.0) qui se liait
string
plutôt à unobject
ou à unJObject
. Le JSON était correct, mais le classeur a essayé d'obtenir une chaîne de la structure JSON et a échoué.Donc, au lieu de:
J'ai dû utiliser le plus spécifique:
la source
Dans mon cas, le fichier contenant la chaîne JSON avait BOM . Une fois que j'ai supprimé la nomenclature, le problème a été résolu.
la source
Ce problème est lié à Byte Order Mark dans le fichier JSON. Le fichier JSON n'est pas encodé en tant que données d'encodage UTF8 lorsqu'il est enregistré. Utilisation de
File.ReadAllText(pathFile)
résoudre ce problème.Lorsque nous opérons sur des données Byte et que nous les convertissons en chaîne, puis que nous les transmettons à JsonConvert.DeserializeObject, nous pouvons utiliser le codage UTF32 pour obtenir la chaîne.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
la source
J'ai eu le même problème avec webapi dans ASP.NET core, dans mon cas, c'était parce que mon application a besoin d'une authentification, puis elle attribue l'annotation
[AllowAnonymous]
et cela a fonctionné.la source
Supposons que ce soit votre json
si vous voulez à nouveau désérialiser le lieu, modifiez json comme ci-dessous
puis essayez de désérialiser en classe respective en prenant la valeur de lieu
la source
Dans mon scénario, j'avais un message légèrement différent, où la ligne et la position n'étaient pas nulles.
C'était la meilleure réponse de Google pour le message que j'ai cité.
Cela est arrivé parce que j'avais appelé un programme à partir de la ligne de commande Windows, en passant JSON en tant que paramètre.
Lorsque j'ai examiné les arguments de mon programme, tous les guillemets doubles ont été supprimés. Vous devez les reconstituer.
J'ai posté une solution ici . Bien qu'il puisse probablement être amélioré avec un Regex.
la source
J'ai eu une erreur similaire et j'ai pensé que je répondrais au cas où quelqu'un aurait quelque chose de similaire. J'étais en boucle sur un répertoire de fichiers json et je les désérialisais, mais j'obtenais la même erreur.
Le problème était qu'il essayait également de récupérer des fichiers cachés. Assurez-vous que le fichier que vous transmettez est un fichier .json. Je suppose que cela gérera également le texte. J'espère que cela t'aides.
la source
Dans mon cas, j'obtenais une erreur sur JsonConvert.PopulateObject () . Ma demande retournait JSON qui était enveloppé dans une paire supplémentaire de crochets '[]', faisant de mon résultat un tableau d'un objet plutôt qu'un simple objet. Voici ce que j'ai fait pour entrer dans ces crochets (uniquement pour ce type de modèle):
la source
Si vous utilisez le téléchargement de données à l'aide de l'URL ... vous devrez peut-être utiliser
la source
Veuillez vérifier que le modèle que vous avez partagé entre le client et le serveur est le même. parfois, vous obtenez cette erreur lorsque vous n'avez pas mis à jour la version de l'API et qu'elle renvoie un modèle mis à jour, mais que vous en avez toujours un ancien. Parfois, vous obtenez ce que vous sérialisez / désérialisez n'est pas un JSON valide.
la source
J'ai rencontré un message d'erreur similaire dans les formulaires Xamarin lors de l'envoi d'une demande à webApi pour obtenir un jeton,
la source
Quand je rencontrais un problème similaire, je l' ai fixé en substituant
&mode=xml
à&mode=json
la demande.la source