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?

57
demandé sur Community 2014-04-24 07:16:07

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.

87
répondu Alexei Levenkov 2014-04-24 03:23:52

J'ai résolu le problème avec ces outils en ligne:

  1. pour vérifier si la structure Json est correcte: http://jsonlint.com/
  2. 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));
48
répondu Edu Pelais 2018-09-18 12:54:28

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

entrez la description de l'image ici

Capture D'Écran Visual Studio

entrez la description de l'image ici

9
répondu Brandon Minnick 2017-10-27 00:41:52

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

1
répondu Hrishikesh T T 2016-05-11 07:35:35

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);

0
répondu Taran 2017-03-23 20:08:09

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);

0
répondu Praveen 2018-02-01 09:39:39

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:<.>

0
répondu A. Almazidi 2018-09-07 06:49:52

Quand j'ai rencontré un problème similaire, je l'ai corrigé en remplaçant &mode=xml pour &mode=json dans la demande.

-4
répondu AlfredBauer 2016-09-27 13:28:15