Derzeit habe ich einige Probleme. Ich verwende C # mit Json.NET. Das Problem ist, dass ich immer bekomme:
{"Unerwartetes Zeichen beim Parsen des Werts: e. Pfad '', Zeile 0, Position 0."}
Ich verwende Json.NET also folgendermaßen. Ich habe eine Klasse, die gerettet werden soll. Die Klasse sieht so aus:
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>();
}
}
Ein Objekt dieser Klasse wird gefüllt und gespeichert mit:
File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);
Der Speicherteil funktioniert einwandfrei und die Datei existiert und ist gefüllt. Danach wird die Datei in die Klasse zurückgelesen mit:
try
{
ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
//otherstuff
}
catch(Exception ex)
{
//error loging stuff
}
Jetzt kommt in der Zeile current = die Ausnahme:
{"Unerwartetes Zeichen beim Parsen des Werts: e. Pfad '', Zeile 0, Position 0."}
Ich weiß nicht warum das kommt. Die JSON- Datei lautet wie folgt:> Klicken Sie auf mich im JSON-Link
Hat jemand irgendwelche Ideen?
quelle
Antworten:
Möglicherweise geben Sie JSON nicht an weiter
DeserializeObject
.Es sieht aus wie aus
File.WriteAllText(tmpfile,...
dieser Art vontmpfile
heißtstring
, den Pfad zu einer Datei enthalten.JsonConvert.DeserializeObject
Nimmt den JSON-Wert und nicht den Dateipfad - es wird also nicht versucht, so etwas zu konvertieren@"c:\temp\fooo"
- was eindeutig nicht JSON ist.quelle
Ich habe das Problem mit diesen Online-Tools gelöst:
Der einfache Code:
quelle
check if the Json structure
ist OKAY in C #?Ich habe den gleichen Fehler in meiner Xamarin.Android-Lösung festgestellt.
Ich habe überprüft, ob mein JSON korrekt ist, und festgestellt, dass der Fehler nur aufgetreten ist, als ich die App als Release-Build ausgeführt habe.
Es stellte sich heraus, dass der Linker eine Bibliothek aus Newtonsoft.JSON entfernte, was dazu führte, dass der JSON falsch analysiert wurde.
Ich habe den Fehler behoben, indem ich Newtonsoft.Json zur Einstellung "Assemblys ignorieren" in der Android Build-Konfiguration hinzugefügt habe (Abbildung unten).
JSON-Parsing-Code
Visual Studio Mac Screenshot
Visual Studio Screenshot
quelle
Ich habe diesen Fehler auch bei einer Web-API-Aktion (.Net Core 3.0) festgestellt, die an a
string
statt an aobject
oder a gebunden warJObject
. Der JSON war korrekt, aber der Ordner hat versucht, eine Zeichenfolge aus der JSON-Struktur abzurufen, und ist fehlgeschlagen.Also statt:
Ich musste das spezifischere verwenden:
quelle
In meinem Fall hatte die Datei mit der JSON-Zeichenfolge eine Stückliste . Nachdem ich die Stückliste entfernt hatte, war das Problem behoben.
quelle
Dieses Problem hängt mit der Byte Order Mark in der JSON-Datei zusammen. JSON-Datei wird beim Speichern nicht als UTF8-Codierungsdaten codiert. Verwenden Sie
File.ReadAllText(pathFile)
dieses Problem.Wenn wir Byte-Daten bearbeiten und diese in eine Zeichenfolge konvertieren und dann an JsonConvert.DeserializeObject übergeben, können wir die UTF32-Codierung verwenden, um die Zeichenfolge abzurufen.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
quelle
Ich hatte das gleiche Problem mit Webapi im ASP.NET-Kern. In meinem Fall musste meine Anwendung authentifiziert werden, dann wurde die Anmerkung zugewiesen
[AllowAnonymous]
und es funktionierte.quelle
Angenommen, dies ist dein json
Wenn Sie den Veranstaltungsort erneut deserialisieren möchten, ändern Sie json wie folgt
Versuchen Sie dann, die jeweilige Klasse zu deserialisieren, indem Sie den Wert des Veranstaltungsortes berücksichtigen
quelle
In meinem Szenario hatte ich eine etwas andere Nachricht, bei der Linie und Position nicht Null waren.
Dies war die beste Antwort von Google auf die von mir zitierte Nachricht.
Dies geschah, weil ich ein Programm über die Windows-Befehlszeile aufgerufen hatte und JSON als Parameter übergeben hatte.
Als ich die Argumente in meinem Programm überprüfte, wurden alle doppelten Anführungszeichen entfernt. Sie müssen sie wiederherstellen.
Ich habe hier eine Lösung gepostet . Obwohl es wahrscheinlich mit einem Regex verbessert werden könnte.
quelle
Ich hatte einen ähnlichen Fehler und dachte, ich würde antworten, falls jemand etwas Ähnliches hat. Ich habe ein Verzeichnis von JSON-Dateien durchlaufen und sie deserialisiert, aber es wurde der gleiche Fehler angezeigt.
Das Problem war, dass versucht wurde, auch versteckte Dateien abzurufen. Stellen Sie sicher, dass es sich bei der übergebenen Datei um eine JSON-Datei handelt. Ich vermute, es wird auch Text verarbeiten. Hoffe das hilft.
quelle
In meinem Fall wurde bei JsonConvert.PopulateObject () ein Fehler angezeigt . Meine Anfrage war die Rückgabe von JSON, das in ein zusätzliches Paar '[]' Klammern eingeschlossen war, wodurch mein Ergebnis ein Array aus einem Objekt und nicht nur aus einem Objekt wurde. Folgendes habe ich getan, um in diese Klammern zu gelangen (nur für diesen Modelltyp):
quelle
Wenn Sie das Herunterladen von Daten über die URL verwenden, müssen Sie diese möglicherweise verwenden
quelle
Bitte überprüfen Sie, ob das Modell, das Sie zwischen Client und Server geteilt haben, identisch ist. Manchmal wird dieser Fehler angezeigt, wenn Sie die API-Version nicht aktualisiert haben und ein aktualisiertes Modell zurückgibt, Sie aber immer noch ein altes haben. Manchmal erhalten Sie, was Sie serialisieren / deserialisieren, ist kein gültiger JSON.
quelle
Ich habe eine ähnliche Fehlermeldung in Xamarin-Formularen erhalten, als ich eine Anfrage an webApi gesendet habe, um ein Token zu erhalten.
quelle
Wenn ich ein ähnliches Problem aufgetreten, fest ich es durch Substitution
&mode=xml
für&mode=json
die Anfrage.quelle