Momentan habe ich einige Probleme. Ich verwende C # mit Json.NET. Das Problem ist, dass ich immer bekomme:
{"Unerwartetes Zeichen beim Parsing des Werts: e. Pfad '', Zeile 0, Position 0."}
So verwende ich Json.NET wie folgt. Ich habe eine Klasse, die gerettet werden sollte. 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);
Das Speichern funktioniert einwandfrei und die Datei ist vorhanden und 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
}
Nun kommt in der aktuellen Zeile die Ausnahme:
{"Unerwartetes Zeichen beim Parsing des Werts: e. Pfad '', Zeile 0, Position 0."}
Ich weiß nicht, warum das so ist. Die Json-Datei ist die folgende -> Klicken Sie im JSON-Link auf mich
Hat jemand irgendwelche Ideen?
Möglicherweise übergeben Sie JSON nicht an DeserializeObject
.
Es sieht so aus, als ob aus File.WriteAllText(tmpfile,...
der Typ von tmpfile
string
ist, der den Pfad zu einer Datei enthält. JsonConvert.DeserializeObject
nimmt den JSON-Wert und nicht den Dateipfad. Daher schlägt der Versuch fehl, etwas wie @"c:\temp\fooo"
zu konvertieren. Dies ist eindeutig kein JSON.
Ich habe das Problem mit diesen Online-Tools gelöst:
Der einfache Code:
RootObject rootObj= JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(pathFile));
Ich habe den gleichen Fehler in meiner Xamarin.Android-Lösung festgestellt.
Ich habe überprüft, ob mein JSON korrekt ist, und habe festgestellt, dass der Fehler nur aufgetreten ist, als ich die App als Release-Build ausführte.
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 Sie Newtonsoft.Json zu der Einstellung Baugruppen ignorieren in der Android-Build-Konfiguration hinzugefügt haben (Screenshot unten).
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);
}
}
Dieses Problem hängt mit der Byte Order Mark in der JSON-Datei zusammen. JSON-Datei wird beim Speichern nicht als UTF8-Codierungsdaten codiert. Beheben Sie dieses Problem mit File.ReadAllText(pathFile)
.
Wenn wir Byte-Daten verarbeiten, diese in einen String konvertieren und dann an JsonConvert.DeserializeObject übergeben, können wir die Zeichenfolge mit UTF32-Codierung abrufen.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
Angenommen, das ist dein Json
{
"date":"11/05/2016",
"venue": "{\"ID\":12,\"CITY\":Delhi}"
}
wenn Sie den Veranstaltungsort erneut deserialisieren möchten, ändern Sie json wie unten beschrieben
{
"date":"11/05/2016",
"venue": "{\"ID\":\"12\",\"CITY\":\"Delhi\"}"
}
versuchen Sie dann, sich in die jeweilige Klasse zu deserialisieren, indem Sie den Wert des Veranstaltungsortes übernehmen
Ich hatte das gleiche Problem mit webapi im ASP.NET-Kern, in meinem Fall, weil meine Anwendung eine Authentifizierung benötigt, dann die Annotation [AllowAnonymous]
zuweist und es funktionierte.
[AllowAnonymous]
public async Task <IList <IServic >> GetServices () {
}
Wenn Sie das Herunterladen von Daten mithilfe von URL ... verwenden, müssen Sie möglicherweise verwenden
var result = client.DownloadData (url);
Bitte überprüfen Sie, ob das zwischen Client und Server freigegebene Modell identisch ist. Manchmal erhalten Sie diese Fehlermeldung, wenn Sie die Api-Version nicht aktualisiert haben und ein aktualisiertes Modell zurückgibt. Sie haben jedoch noch ein altes Modell. Manchmal erhalten Sie, was Sie serialisieren/deserialisieren, keine gültige JSON.
In meinem Szenario hatte ich eine etwas andere Meldung, bei der die Linie und Position nicht Null waren.
E. Pfad 'job [0] .name', Zeile 1, Position 12.
Dies war die beste Antwort von Google auf die von mir angegebene Nachricht.
Dies geschah, weil ich ein Programm über die Windows-Befehlszeile aufgerufen 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 eine Lösung gepostet hier . Obwohl es wahrscheinlich mit einem Regex verbessert werden könnte.
Ich habe eine ähnliche Fehlermeldung in Xamarin Forms erhalten, wenn ich eine Anfrage an webApi schickte, um ein Token zu erhalten.
Nicht behandelte Ausnahme: Newtonsoft.Json.JsonReaderException: Unerwartetes Zeichen beim Analysieren des Werts: <. Pfad '', Zeile 0, Position 0
Ich hatte einen ähnlichen Fehler und dachte, ich würde antworten, falls jemand etwas Ähnliches hat. Ich habe ein Verzeichnis mit JSON-Dateien durchlaufen und sie deserialisiert, habe aber den gleichen Fehler erhalten.
Das Problem war, dass versucht wurde, auch versteckte Dateien zu erfassen. 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.